Cmake новичок здесь, в настоящее время я пытаюсь преобразовать проект cmake, который был разработан только с одной конфигурацией, в проект с несколькими конфигурациями, который может генерировать файлы Visual Studio.
Моя проблема, которую я не могу решить, состоит в том, что в проекте cmake существует логика, зависящая от переменной CMAKE_BUILD_TYPE, такая как:
set(ENABLE_DEBUG TRUE)
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
set(ENABLE_DEBUG FALSE)
)
Так как для мультиконфигурированного cmake CMAKE_BUILD_TYPE пуст, этот способ не работает. Затем переменная ENABLE_DEBUG находится в проекте cmake и используется для таких вещей, как:
Случай 1: Добавление библиотек только для отладки конфигурации
if(ENABLE_DEBUG)
list(APPEND LIB_SRC src/lib_debug.cpp)
endif()
add_library(LIB OBJECT LIB_SRC)
Случай 2: Добавление флагов препроцессора только в отладочный конфиг
if(ENABLE_DEBUG)
add_definitions(...)
endif()
Поэтому меня интересует, есть ли у кого-нибудь обходной путь для одного или обоих описанных выше случаев, который бы работал для мультиконфигурированных проектов cmake, т. Е. Чтобы я мог указывать добавления библиотеки и флаги препроцессора, не завися от переменной CMAKE_BUILD_TYPE. Или даже лучше, если есть специальный способ установки ENABLE_DEBUG без зависимости от переменной CMAKE_BUILD_TYPE?
В CMake используется общий способ настройки конкретных настроек для инструментов построения нескольких конфигураций. генератор выражений.
команда add_library позволяет использовать выражения генератора для исходных файлов. Например. этот:
add_library(mylib common.c $<$<CONFIG:DEBUG>:debug.c>)
создает библиотеку, состоящую из common.c
во всей конфигурации плюс дополнительные debug.c
в отлаживать конфигурации.
Документация для add_definitions не отмечает использование выражений генератора, но документацию для target_compile_definitions делает:
target_compile_definitions(mylib PUBLIC $<$<CONFIG:DEBUG>:-DDEBUG_VAR>)
Других решений пока нет …