Установите параметры CFLAGS и CXXFLAGS с помощью CMake



Я просто хочу, чтобы отлаживать код, работающий на 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" только?

759   4  

4 ответов:

вам нужно установить флаги после the в CMakeLists.формат txt.

кроме того, если вы звоните include(${QT_USE_FILE}) или add_definitions(${QT_DEFINITIONS}), вы должны включить эти set команды после Qt те, так как они будут добавлять дополнительные флаги. Если что и дело в том, что вы, возможно, просто хотите добавить свои флаги к Qt, поэтому измените, например,

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

вы должны изменить флаги 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

самое простое решение работает нормально для меня это:

export CFLAGS=-ggdb
export CXXFLAGS=-ggdb

CMake добавит их ко всем флагам конфигураций.

в системах Unix, для нескольких проектов, я добавил Эти строки в CMakeLists.txt и он успешно компилировался, потому что базовый ( / usr / include) и local включает в себя ( / 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++ и правильный путь к каталогу для флагов компоновщика.

Примечание: компилятор C++ (c++) не поддерживает-L, поэтому мы должны использовать CMAKE_EXE_LINKER_FLAGS

Comments

    Ничего не найдено.