除了编译器标志选择之外,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
的值应该对多配置生成器没有影响。这也是说明的内容:此变量仅对单个配置生成器有意义。您是否可以在不同的项目符号上展开一点,也许可以用一个示例?我已经编辑了多配置工具的生成类型描述。希望事情现在变得明朗起来。