使用调试符号和 cmake 编译项目的正确方法

Wak*_*nka 2 cmake libharu cmake-gui

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

CMAKE_BUILD_TYPE
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_DEBUG
Run Code Online (Sandbox Code Playgroud)

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

PS:我注意到使用 cmake 为 Visual Studio 2013 生成的项目设置了 Debug/Win32,这是否足够?在 CMakeLists.txt 中的何处指定了此信息?

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

谢谢

Tsy*_*rev 5

通过CMAKE_BUILD_TYPE将编译器的一组附加选项切换为一个来设置配置类型,这通常反映了配置的含义。也就是说,通过

-DCMAKE_BUILD_TYPE=Debug
Run Code Online (Sandbox Code Playgroud)

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

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

因此,如果您发现它CMakeLists.txt与变量CMAKE_BUILD_TYPEand无关CMAKE_<LANG>_FLAGS_<CONFIG>,那么它遵循有关配置 type 的常见约定


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

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

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