3

CMAKE_BUILD_TYPE当我想获取调试或发布项目构建时,建议将这里作为参数传递给 cmake。我正在尝试用 cmake 编译libharu,我想用调试符号编译它。我搜索了libharu中包含的 CMakeLists.txt 中的以下字符串:

CMAKE_BUILD_TYPE
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_DEBUG

但我什么也没找到。我的问题是,如果指定libharuCMAKE_BUILD_TYPE的 CMakeLists.txt何时没有提及它是否有意义?如果没有,我如何使用调试符号编译libharu ?

PS:我注意到使用 cmake 为 Visual Studio 2013 生成的项目设置了 Debug/Win32,这就足够了吗?在 CMakeLists.txt 的什么地方指定了这个信息?

PPS:我想这个问题很大程度上取决于特定的项目,但一般来说有什么方法可以做到这一点吗?我的意思是,CMAKE_BUILD_TYPE=Debug总是创建调试版本还是我应该注意的其他事情?

谢谢

4

1 回答 1

5

通过CMAKE_BUILD_TYPE开关将编译器的附加选项集设置为一个,这通常反映了配置的含义。也就是说,通过

-DCMAKE_BUILD_TYPE=Debug

告诉cmake编译器生成调试信息,除非 CMakeLists.txt 修改了该行为

与配置相关的编译器选项包含在 variables 中CMAKE_<LANG>_FLAGS_<CONFIG>。例如,变量CMAKE_C_FLAGS_DEBUG在“调试”配置中包含 C 编译器的附加选项。这些变量由 CMake 自动填充,并且CMakeLists.txt本身很少修改它们。

因此,如果您发现CMakeLists.txt不使用变量CMAKE_BUILD_TYPECMAKE_<LANG>_FLAGS_<CONFIG>,那么它遵循关于配置类型的通用约定


并不意味着CMakeLists.txt 应该使用这些变量。

通常CMakeLists.txt设置CMAKE_BUILD_TYPE为某个默认值,前提是用户未设置该变量并且使用了单一配置生成器。如果编译器的默认设置不适合项目,CMakeLists.txt也可以设置一些变量。CMAKE_<LANG>_FLAGS_<CONFIG>

但即使CMakeLists.txt不触及这些变量,它们也起作用。

于 2016-09-09T07:21:22.267 回答