设置使用CMake的CFLAGS和CXXFLAGS选项设置使用CMake的CFLAGS和CXXFLA

2019-05-12 22:13发布

我只是想调试一些代码运行在Linux上,我需要一个调试版本( -O0 -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 ,我观察到的输出,这样

... /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"而已?

Answer 1:

您需要设置标志project在你的CMakeLists.txt命令。

另外,如果你调用include(${QT_USE_FILE})add_definitions(${QT_DEFINITIONS})你应该包括这些set Qt的那些命令之后,因为这些将进一步追加标志。 如果是这样的话,你也许只是想你的标志追加到了Qt的,所以变成如

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


Answer 2:

您必须更改CMake的C / CXX默认标志。

根据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定义的值



Answer 3:

对我来说,最简单的解决方案做工精细是这样的:

export CFLAGS=-ggdb
export CXXFLAGS=-ggdb

CMake的将它们添加到所有配置的标志。



Answer 4:

在Unix系统中,几个项目,我添加几行代码写进的CMakeLists.txt并成功编译,因为基地 (/ usr / include目录 )和当地包括( 在/ usr /本地/包括 )进入分隔的目录:

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 ++编译器标记和用于连接标志正确的目录路径。

注意:C ++编译器(C ++)不支持-L,所以我们必须使用CMAKE_EXE_LINKER_FLAGS



文章来源: Set CFLAGS and CXXFLAGS options using CMake
标签: cmake cflags