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

Proper way to compile project with debug symbols and cmake

Here is recommended to pass CMAKE_BUILD_TYPE as an argument to cmake when I want to obtain debug or release project builds. I'm trying to compile libharu with cmake and I would like to compile it with debug symbols. I've searched CMakeLists.txt included in libharu 用于以下字符串:

CMAKE_BUILD_TYPE
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_DEBUG

但我一无所获。我的问题是,当使用调试符号 libharu's CMakeLists.txt doesn't mention it? If not, how can I compile libharu 时指定 CMAKE_BUILD_TYPE 是否有意义?

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

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

谢谢

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

-DCMAKE_BUILD_TYPE=Debug

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

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

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


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

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

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