CMake 设置 Debug 和 Release 编译模式

对 CMake 工程进行编译时,可以通过 CMAKE_BUILD_TYPE 宏决定项目编译成 Debug 版本还是 Release 版本,默认为 Release 版本。

Debug 模式,可以进行 gdb 调试

mkdir debug
cd debug 
cmake -DCMAKE_BUILD_TYPE=Debug .. 
make

Release 模式

mkdir release
cd release 
cmake -DCMAKE_BUILD_TYPE=Release .. 
make

当然,你也可以在 CMakeLists.txt 文件中指定编译模式,如下。

SET(CMAKE_BUILD_TYPE "Debug")
# 或者
SET(CMAKE_BUILD_TYPE "Release")

编译完成后,我们可以使用 readelf 命令来查看该二进制可执行文件是否包含 debugging symbols 信息。

例如:查看 debug/bin/Template 的 Section 头部信息,可以看到 debug 相关的符号。

$ readelf -S debug/bin/Template | grep debug
  [28] .debug_aranges    PROGBITS         0000000000000000  0000609b
  [29] .debug_info       PROGBITS         0000000000000000  0000615b
  [30] .debug_abbrev     PROGBITS         0000000000000000  00007c79
  [31] .debug_line       PROGBITS         0000000000000000  0000823b
  [32] .debug_str        PROGBITS         0000000000000000  00008cdc

而查看 release/bin/Template 的 Section 头部信息,则没有打印任何内容。

$ readelf -S release/bin/Template | grep debug