除了编译器标志选择之外,CMAKE_BUILD_TYPE会影响什么?

时间:2017-10-18 21:25:05

标签: cmake release-builds debug-build

know如果我们设置-DCMAKE_BUILD_TYPE=Release(或Debug等),则CMAKE_C_FLAGS_RELEASECMAKE_CXX_FLAGS_RELEASE的值将附加到CMAKE_C_FLAGS分别为{1}}和CMAKE_C_FLAGS

但这是设置构建类型的唯一效果吗?如果没有,其他影响是什么?

1 个答案:

答案 0 :(得分:1)

实际上,构建类型会影响很多事情。其中:

  • generator expressions

    表达式$<$<CONFIG:DEBUG>:XXX>将扩展为XXX,CMAKE_BUILD_TYPE设置为Debug,否则为

    因为生成器表达式可以在许多命令中使用,所以设置构建类型会影响使用依赖于构建类型的表达式的所有命令。

  • target_link_libraries使用 debug 关键字添加的库仅在Debug构建类型中生效。

    优化关键字类似。

    (隐含地,这使用上面描述的生成器表达式。)

  • IMPORTED 库的一些特性。

    IMPORTED_LOCATION 等属性有config-specific variants,这些属性取决于配置类型。

    IMPORTED 库通常是find_package()调用的结果,因此您的项目可能会以与配置相关的方式与3d-party项目链接。

  • CONFIGURATION - install命令的特定部分。

    仅适用于CONFIGURATION <conf>部分,这与活动配置相对应。

虽然无法为多配置构建工具设置CMAKE_BUILD_TYPE,但构建阶段的配置集会影响上述所有内容。

此外,使用多配置构建工具,所选构建类型将附加到输出工件的位置,如可执行文件和库(请参阅例如RUNTIME_OUTPUT_DIRECTORY目标属性的说明)。