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

65

Я просто хочу отладить некоторый код, работающий в Linux, и мне нужна сборка отладки (-O0 -ggdb). Поэтому я добавил эти вещи в свойCMakeLists.txt:

<code>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")
</code>

Когда я попытался скомпилировать, я развернулся, используяmake VERBOSE=1 И я наблюдал выходной, вот так

<code>... /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 ...
</code>

Видимо код скомпилирован с"-g -O2" и это не то, что я хочу. Как я могу заставить его использовать"-O0 -ggdb" только?

Если вы хотите отладочную сборку, просто выполните настройку отладки в командной строке. & quot; cmake -DCMAKE_BUILD_TYPE = Debug & quot ;. Полученная сборка будет иметь отладочные флаги для данной системы сборки. Нет причин изменять сам файл cmake. Вы также можете отправить значение CMAKE_C_FLAGS с другим аргументом -D. Atifm

Ваш Ответ

4   ответа
6

export CFLAGS=-ggdb
export CXXFLAGS=-ggdb

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

63

after project Команда в вашем CMakeLists.txt.

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

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")
Error: User Rate Limit Exceeded majie
Error: User Rate Limit ExceededQT_NO_EXCEPTIONSError: User Rate Limit Exceeded${QT_DEFINITIONS}Error: User Rate Limit Exceeded-g -O2.
Error: User Rate Limit ExceededsetError: User Rate Limit Exceeded majie
3

sts.txt, и он успешно компилировался, потому чтоbase (/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 ++ и правильный путь к каталогу для флагов компоновщика.

Note: C++ compiler (c++) doesn't support -L, so we have to use CMAKE_EXE_LINKER_FLAGS

Разве это не лучше использоватьinclude_directories вместо-I флаг?
12

В соответствии с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

Error: User Rate Limit Exceeded

Похожие вопросы