【问题标题】:cmake command line - pass var dependent on the build typecmake 命令行 - 传递 var 取决于构建类型
【发布时间】:2021-05-11 07:54:13
【问题描述】:

我正在尝试创建具有多种配置的 cmake 构建:调试/发布。 我使用的是 msvc,所以我可以调用一次 cmake 来配置 Debug 和 Release 项目。

我的问题:

  • 我有一个自定义变量,我想通过命令行传递给 cmake
  • 并且该变量取决于!关于构建类型!

例如

  • cmake -DMYVAR=alfa //if the build type is Debug
  • cmake -DMYVAR=beta //if the build type is Release

问题是:我希望调用一次 cmake 并使用条件。 (我不想用不同的值调用 cmake 两次)

我的选项不是CXX_FLAGS 的一部分。对于那些,我可以使用CMAKE_CXX_FLAGS_DEBUG / CMAKE_CXX_FLAGS_RELEASE

所以我的问题:

  1. cmake 有没有办法在命令行中根据 cmake 运行时内部使用的“当前”构建类型设置变量?

  2. 如果 #1 的答案是“否”,我想我必须调用 cmake 两次。这是要走的路吗? (我不想修改CMakeLists文件)

谢谢, 克里斯

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    cmake 有没有办法在命令行中根据 cmake 运行时内部使用的“当前”构建类型设置变量?

    一般不会。

    首先,在多配置生成器(如 MSVC)中,没有当前构建类型”。在处理CMakeLists.txt 时,CMake 没有设置构建类型,无论是公开的还是内部的。只有当CMakeLists.txt 处理完成后,CMake 才会为每个配置(构建类型)生成参数。

    依赖于构建类型的事物通常使用generator expressions 值进行设置,这些值有条件地取决于配置或特定于配置的设置。 但只有一组选定的命令(以及选定的一组参数)可以使用生成器表达式。

    因此,如果项目在上下文中使用变量,则当生成器表达式被禁止时,您可以在 CMakeLists.txt 内部或命令行中将此变量设置为特定于配置的值。例如。如果在if() 命令中使用了变量,则生成器表达式不能用于指定变量的值。

    【讨论】:

    • 谢谢,我期待 :(。我只是希望在某处有一个 cmake 约定用于(用户指定)类似于 CMAKE_CXX_FLAGS_DEBUG /CMAKE_CXX_FLAGS_RELEASE 的构建类型因变量,但我想没有,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多