2012-04-10 2 views
52

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

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"?

+1

Если вы хотите отлаживать сборку, просто выполните отладку configure в командной строке. msgstr "cmake -DCMAKE_BUILD_TYPE = Отладка". Полученная сборка будет иметь флаги отладки для данной системы сборки. Нет причин изменять сам файл cmake. Вы также можете отправить значение CMAKE_C_FLAGS с другим аргументом -D. – Atifm

ответ

47

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

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

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

Я поместил эти флаги после команды проекта. Но результат тот же. – majie

+0

Я только что заметил «QT_NO_EXCEPTIONS» в ваших флагах, поэтому я немного расширил свой ответ. Я предполагаю, что '$ {QT_DEFINITIONS}' добавляет '-g -O2'. – Fraser

+1

Да, это он. Постановка этих команд 'set' после Qt решает проблему. Большое спасибо. – majie

9

Вы должны изменить FLAGS по умолчанию Cake C/CXX.

В соответствии с CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE} положить в главном CMakeLists.txt одного из:

для С

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

2

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

3

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

export CFLAGS=-ggdb 
export CXXFLAGS=-ggdb 

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

Смежные вопросы