it-swarm.com.ru

Отладка против выпуска в CMake

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

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

С 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 должен автоматически обнаружить и использовать компилятор, подходящий для ваших разных исходных файлов.

564
kb1ooo

Относительно флагов отладки/выпуска см. Переменную 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++.

18
duncan

Вместо того, чтобы напрямую манипулировать строками 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, который представляет собой просто строку, разделяющую ее элементы точкой с запятой ;.

9
sebastian

// CMakeLists.txt: release

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

// CMakeLists.txt: debug

set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
3
sailfish009