使用CMake设置CFLAGS和CXXFLAGS选项

w8f9ii69  于 2023-05-17  发布在  其他
关注(0)|答案(4)|浏览(417)

我只是想调试一些在Linux上运行的代码,我需要一个调试版本(***-O 0-ggdb***)。所以我把这些东西添加到我的 * CMakeLists.txt * 文件中:

set(CMAKE_BUILD_TYPE DEBUG)
set(CMAKE_C_FLAGS "-O0 -ggdb")
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_C_FLAGS_RELEASE "-O0 -ggdb")
set(CMAKE_CXX_FLAGS "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "-O0 -ggdb")

当我尝试编译时,我使用make VERBOSE=1打开了verbose,我观察到的输出如下所示

... /usr/bin/c++ -D_BSD_SOURCE **-O0 -ggdb** -Wnon-virtual-dtor 
-Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W 
-Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS 
-fno-check-new -fno-common -Woverloaded-virtual -fno-threadsafe-statics 
-fvisibility=hidden -fvisibility-inlines-hidden **-g -O2** 
-fno-reorder-blocks -fno-schedule-insns -fno-inline ...

显然,代码是用“-g-O2”编译的,这不是我想要的。如何强制它只使用"-O0 -ggdb"

nkoocmlb

nkoocmlb1#

您必须更改CMake CFLAGS/CXXFLAGS默认标志。
根据CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE},在主CMakeLists.txt中放入以下之一:
对于C

set(CMAKE_C_FLAGS_DEBUG "put your flags")
set(CMAKE_C_FLAGS_MINSIZEREL "put your flags")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "put your flags")
set(CMAKE_C_FLAGS_RELEASE "put your flags")

对于C++

set(CMAKE_CXX_FLAGS_DEBUG "put your flags")
set(CMAKE_CXX_FLAGS_MINSIZEREL "put your flags")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "put your flags")
set(CMAKE_CXX_FLAGS_RELEASE "put your flags")

这将覆盖在CMakeCache.txt中定义的值。

oxosxuxt

oxosxuxt2#

在Unix系统上,对于几个项目,我将这些行添加到CMakeLists.txt中,并且它成功编译,因为base/usr/include)和localincludes(/usr/local/include)进入单独的目录:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/local/include -L/usr/local/lib")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")

它附加正确的目录,包括C和C++编译器标志的路径以及链接器标志的正确目录路径。

2hh7jdfx

2hh7jdfx3#

您需要在CMakeLists.txt中设置project命令后的标志。
另外,如果您调用include(${QT_USE_FILE})add_definitions(${QT_DEFINITIONS}),则应在Qt命令之后包含这些set命令,因为这些命令将附加更多标志。如果是这样的话,你可能只是想把你的标志附加到Qt的标志上,所以改为例如。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")
iswrvxsc

iswrvxsc4#

对我来说最简单的解决方案是这样的:

export CFLAGS=-ggdb
export CXXFLAGS=-ggdb

CMake会将它们附加到所有配置的标志中。确保清除CMake缓存。

相关问题