使用CMake将调试标志从-g更改为-ggdb3



考虑以下简单的C++程序:

// main.cpp
#include <iostream>
int main()
{
std::cout << "Hello World" << std::endl;
return 0;
}

我使用CMake为这个项目生成Makefile,然后使用GNUMake和g++构建它。我的CMakeLists.txt文件看起来是这样的(它实际上更复杂,当然是简化的(:

cmake_minimum_required(VERSION 3.20)
project(HelloWorld VERSION 1.0 LANGUAGES CXX)
add_executable(HelloWorld main.cpp)

一切正常,但在构建调试构建时:

cmake -DCMAKE_BUILD_TYPE=Debug ..

我注意到使用的调试器标志是-g。当运行make VERBOSE=1以查看使用了哪些标志时,以下是编译main.cpp:时显示的内容

[ 50%] Building CXX object CMakeFiles/HelloWorld.dir/main.cpp.o
/usr/bin/c++ -g -MD -MT CMakeFiles/HelloWorld.dir/main.cpp.o -MF CMakeFiles/HelloWorld.dir/main.cpp.o.d -o CMakeFiles/HelloWorld.dir/main.cpp.o -c /home/HelloWorld/main.cpp

注意-g标志,它是由CMake自动放在那里添加调试信息的。

如何将其更改为-ggdb3

-g标志在内置缓存变量CMAKE_C_FLAGS_DEBUGCMAKE_CXX_FLAGS_DEBUGCMAKE_C_FLAGS_RELWITHDEBINFOCMAKE_CXX_FLAGS_RELWITHDEBINFO中自动设置,其中包含相应构建类型的默认编译选项。您可以根据需要替换和强制设置这些缓存的变量。

string(REGEX REPLACE "\b-g\b" "-ggdb3" tmp_value "${CMAKE_C_FLAGS_DEBUG}")
set_property(CACHE CMAKE_C_FLAGS_DEBUG PROPERTY VALUE "${tmp_value}")

最后,您可能根本不需要使用-ggdb3

最新更新