cmake - 如何在 Windows Prompt 中调用 cmake 并将 txt 文件内容作为选项传递?

标签 cmake prompt

我厌倦了在 .cmd/.bat/.sh/.ps1 文件中手动指定每个 cmake 选项,尤其是我使用的项目有数百个选项。 将选项放入文本文件 会更直接。
假设我有这个 CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)

project(demo)

option(USE_A "use a?" OFF)
option(USE_B "use b?" OFF)
option(USE_C "use c?" OFF)

if (USE_A)
    message(STATUS "USE_A: ON")
else()
    message(STATUS "USE_A: OFF")
endif()

if (USE_B)
    message(STATUS "USE_B: ON")
else()
    message(STATUS "USE_B: OFF")
endif()

if (USE_C)
    message(STATUS "USE_C: ON")
else()
    message(STATUS "USE_C: OFF")
endif()
我想用这样的命令(在 Windows 提示终端中)构建它:
md build
cd build
cmake .. ^
    -G "Visual Studio 16 2019" -A x64 ^
    $(type ..\options.txt)  # this line is not working, how can I modify it?
哪里options.txt是:
-DUSE_A=ON
-DUSE_B=ON
-DUSE_C=ON
这应该与此等效:
md build
cd build
cmake .. ^
    -G "Visual Studio 16 2019" -A x64 ^
    -DUSE_A=ON ^
    -DUSE_B=ON ^
    -DUSE_C=ON

最佳答案

CMake 用户经常面临的一个问题是与其他人共享设置以获取配置项目的常用方法。预设在 3.19 中添加并在 3.20 中改进。这样做可能是为了支持 CI 构建,或者为经常使用相同构建的用户。 CMake 支持两个文件,CMakePresets.json 和 CMakeUserPresets.json,它们允许用户指定常见的配置选项并与他人共享。
我写了一个例子来突出你想要的用例。
创建一个名为 CMakePresets.json 的文件

{
    "version": 2,
    "cmakeMinimumRequired": {
      "major": 3,
      "minor": 20,
      "patch": 0
    },
    "configurePresets": [
        {
          "name": "vs2019",
          "displayName": "Vs 2019",
          "description": "Build using VS 2019",
          "generator": "Visual Studio 16 2019",
          "architecture": "x64",
          "binaryDir": "${sourceDir}/build/vs",
          "cacheVariables": {
            "USE_A": "ON",
            "USE_B": "ON",
            "USE_C": "ON"
          }
        }
    ],
    "buildPresets": [
      {
        "name": "vs2019",
        "configurePreset": "vs2019"
      }
    ]
}
这是我使用它的一个例子:
$> cmake --list-presets
Available configure presets:

  "vs2019" - Vs 2019

$> cmake --preset vs2019
Preset CMake variables:

  USE_A="ON"
  USE_B="ON"
  USE_C="ON"

-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.21337.
-- The CXX compiler identification is MSVC 19.29.29917.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Preview/VC/Tools/MSVC/14.29.29917/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/git/ItoGraphics/build/vs

$> cmake --build --preset vs2019
Microsoft (R) Build Engine version 16.10.0-preview-21118-01+f0eebf287 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
当然,您不必从命令行构建。您可以直接打开 Visual Studio,但如果您愿意。您可以从命令行构建,如上所示。
真正需要注意的一件事是 CMake 是一个非常严格的 json 解析器。暂无评论。没有尾随逗号。这个新功能的错误消息还不是很好。然而,一旦你开始,它的生活质量真的很棒。
CMakePresets.json 适用于您团队中的每个人。
CMakeUserPresets.json 是给你自己的。

关于cmake - 如何在 Windows Prompt 中调用 cmake 并将 txt 文件内容作为选项传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66773498/

相关文章:

linux - CMake 链接 glfw3 lib 错误

c - 如何在C程序执行过程中显示自定义提示符?

javascript - 提示命令在 html 中不起作用

android - 微调器提示不显示

bash - 通过打开包含内容的文本编辑器来捕获用户输入

c++ - CMake 链接说明

CMake如何将构建目录设置为与源目录不同

c++ - 麻省理工学院球体模拟设置中的 Matlab 错误

c++ - CMake-Qt : linking to wrong versions

zsh - 以独特的方式折叠zsh提示中的目录