Отладка против выпуска в CMake - PullRequest
356 голосов
/ 11 октября 2011

В скомпилированном проекте GCC

  • Как запустить CMake для каждого целевого типа (отладка / выпуск)?
  • Как указать флаги отладки и выпуска C / C ++используя CMake?
  • Как мне выразить, что основной исполняемый файл будет скомпилирован с g++ и одна вложенная библиотека с gcc?

Ответы [ 4 ]

568 голосов
/ 11 октября 2011

С CMake обычно рекомендуется делать сборку "вне источника" .Создайте свой CMakeLists.txt в корне вашего проекта.Затем из корня вашего проекта:

mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make

И для Debug (снова из корня вашего проекта):

mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Release / Debug добавитсоответствующие флаги для вашего компилятора.Существуют также конфигурации сборки RelWithDebInfo и MinSizeRel.


Вы можете изменять / добавлять флаги в CMakeLists.txt с помощью переменных CMAKE_C_FLAGS_DEBUG и CMAKE_C_FLAGS_RELEASE, например:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")

Подробнее см. CMAKE_BUILD_TYPE .


Что касается вашего третьего вопроса, я не уверен, что именно вы спрашиваете.CMake должен автоматически обнаружить и использовать компилятор, соответствующий вашим разным исходным файлам.

20 голосов
/ 11 октября 2011

Для флагов отладки / выпуска см. Переменную CMAKE_BUILD_TYPE (вы передаете ее как cmake -DCMAKE_BUILD_TYPE=value). Он принимает значения типа Release, Debug и т. Д.

http://cmake.org/Wiki/CMake_Useful_Variables#Compilers_and_Tools

cmake использует расширение для выбора компилятора, поэтому просто назовите ваши файлы .c.

Вы можете изменить это с помощью различных настроек:

Например:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

Скомпилирует .c файлы с помощью g ++. Ссылка выше также показывает, как выбрать определенный компилятор для C / C ++.

9 голосов
/ 01 сентября 2018

Вместо того, чтобы напрямую манипулировать строками CMAKE_CXX_FLAGS (что можно сделать более красиво, используя string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3") btw), вы можете использовать add_compiler_options:

add_compile_options(
  "-Wall" "-Wpedantic" "-Wextra" "-fexceptions"
  "$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)

Это добавит указанные предупреждения ко всем типам сборки, но только к указанным флагам отладки в сборку DEBUG. Обратите внимание, что параметры компиляции хранятся в виде списка CMake, который представляет собой просто строку, разделяющую ее элементы точкой с запятой ;.

3 голосов
/ 18 декабря 2017

// CMakeLists.txt: выпуск

set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)

// CMakeLists.txt: отладка

set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...