Подтвердить что ты не робот

Cmake CFLAGS CXXFLAGS модификация

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

Когда я попытался скомпилировать, я перешел в verbose при использовании 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" только?

4b9b3361

Ответ 1

Вам нужно установить флаги после команды project в вашем CMakeLists.txt.

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

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

Ответ 2

Вы должны изменить FLAGS по умолчанию Cake 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")

Для С++

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

Ответ 3

Самое легкое решение для меня отлично работает:

export CFLAGS=-ggdb
export CXXFLAGS=-ggdb

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

Ответ 4

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

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