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

除了编译器标志选择之外,CMAKE_BUILD_类型会影响什么?,cmake,release-builds,debug-build,Cmake,Release Builds,Debug Build,如果我们设置-DCMAKE\u BUILD\u TYPE=Release(或Debug等),那么CMAKE\u C\u FLAGS\u Release和CMAKE\u CXX\u FLAGS\u Release的值将分别附加到CMAKE\u C\u FLAGS和CMAKE\u C\u FLAGS\u 但是这是设置构建类型的唯一效果吗?如果没有,还有什么影响?实际上,构建类型影响很多事情。其中: : 表达式$将扩展为XXX,并将CMAKE\u BUILD\u TYPE设置为Debug,否则不设置

如果我们设置
-DCMAKE\u BUILD\u TYPE=Release
(或
Debug
等),那么
CMAKE\u C\u FLAGS\u Release
CMAKE\u CXX\u FLAGS\u Release
的值将分别附加到
CMAKE\u C\u FLAGS
CMAKE\u C\u FLAGS\u


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

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

  • :

    表达式
    $
    将扩展为
    XXX
    ,并将CMAKE\u BUILD\u TYPE设置为
    Debug
    ,否则不设置任何内容

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

  • 由带有debug关键字的
    target\u link\u库
    添加的库仅在
    debug
    build类型中有效

    类似于优化的关键字

    (隐式地,它使用上述生成器表达式)

  • 导入库的一些属性

    导入的位置等属性具有,这些属性的选择取决于配置类型

    通常,导入的库是通过调用
    find_package()
    创建的,因此您的项目可能会以依赖于配置的方式与3d party项目链接

  • 命令的特定配置部分

    仅应用与激活配置相对应的
    配置部分


多配置工具不使用
CMAKE\u BUILD\u TYPE
变量,但它们仍然有“BUILD TYPE”的概念。该构建类型在配置阶段未知,当CMake解析
CMakeLists.txt
时,仅在执行项目的构建时设置。然而,此构建类型“追溯”影响上述所有属性


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

请注意:如果可能,您应该避免使用CMake wiki,因为它非常过时,而且通常不太准确。这是一个更好的信息来源(至少对于CMake版本3.0和更高版本而言)。我不确定我是否理解最后一段。另外,
CMAKE\u BUILD\u TYPE
的值应该对多配置生成器没有影响。这也是说明的内容:此变量仅对单个配置生成器有意义。您是否可以在不同的项目符号上展开一点,也许可以用一个示例?我已经编辑了多配置工具的生成类型描述。希望事情现在变得明朗起来。