У меня есть несколько профилей сборки в CLion -> Settings -> Build, Execution, Deployment -> CMake
. Как я могу установить определения препроцессора для каждого профиля, независимо от того, какой компилятор я использую?
Я не пробовал это, но это должно работать
if (CMAKE_CONFIGURATION_TYPES)
string(TOLOWER "${CMAKE_CONFIGURATION_TYPES}" CMAKE_CONFIGURATION_TYPES_LOWER)
else()
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_CONFIGURATION_TYPES_LOWER)
endif ()
foreach(config ${CMAKE_CONFIGURATION_TYPES_LOWER})
if (${config} MATCHES "debug")
#add preprocessor definition something like this bellow
add_definitions(-DFOO -DBAR ...)
elseif (${config} MATCHES "release")
#and so on...
endif ()
endforeach()
Итак, чтобы правильно проверять строки, мы конвертируем типы конфигурации сборки в нижний регистр, а затем проверяем, соответствует ли конфигурация из типа этим пользовательским типам конфигурации. если это так, то мы можем добавить некоторые определения препроцессора и т. д. (
${CMAKE_CONFIGURATION_TYPES} ничего не выводит. Я только что понял, что вкладка CMake
содержит не конфигурации cmake, а профили сборки.
Global add_definitions
— плохой стиль в современном CMake. Вместо этого рекомендуется использовать target_compile_definitions
и т. д.
Не знал. Спасибо!
Settings -> Build, Execution, Deployment -> CMake
.CMake options
: -DYOUR_DEFINE_VARIABLE=1
if (YOUR_DEFINE_VARIABLE)
add_definitions(-DYOUR_DEFINE_VARIABLE=1)
endif (YOUR_DEFINE_VARIABLE)
Что это говорит?