На что влияет CMAKE_BUILD_TYPE, кроме выбора флага компилятора?
Я знаю, что если мы установим -DCMAKE_BUILD_TYPE=Release
(или же Debug
и т. д.), то значения CMAKE_C_FLAGS_RELEASE
а также CMAKE_CXX_FLAGS_RELEASE
будет добавлен к CMAKE_C_FLAGS
а также CMAKE_C_FLAGS
соответственно.
Но это единственный эффект установки типа сборки? Если нет, каковы другие эффекты?
1 ответ
На самом деле, тип сборки влияет на многие вещи. Среди них:
выражение
$<$<CONFIG:DEBUG>:XXX>
будет расширен доXXX
с CMAKE_BUILD_TYPE, установленным вDebug
и ни к чему другому.Поскольку выражения генератора могут использоваться в ряде команд, настройка типа сборки влияет на все команды, которые используют выражения в зависимости от типа сборки.
библиотеки, добавленные
target_link_libraries
с ключевым словом отладки вступают в силу только вDebug
тип сборки.Аналогично оптимизированному ключевому слову.
(Это подразумевает использование выражений генератора, описанных выше).
Некоторые свойства ИМПОРТИРОВАННЫХ библиотек.
Такие свойства, как IMPORTED_LOCATION, имеют специфичные для конфигурации варианты, которые выбираются в зависимости от типа конфигурации.
Часто ИМПОРТИРУЕМЫЕ библиотеки создаются в результате
find_package()
позвоните, так что ваш проект может быть связан с сторонним проектом в зависимости от конфигурации.КОНФИГУРАЦИЯ - специфическая часть команды установки.
Только те
CONFIGURATION <conf>
часть применяется, что соответствует активной конфигурации.
В то время как CMAKE_BUILD_TYPE не может быть установлен для инструментов сборки с несколькими конфигурациями, набор конфигурации для этапа сборки влияет на все вещи, описанные выше.
Кроме того, с помощью инструментов мультиконфигурации сборки выбранный тип сборки добавляется к расположению выходных артефактов, таких как исполняемые файлы и библиотеки (см., Например, описание свойства цели RUNTIME_OUTPUT_DIRECTORY).