На что влияет 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).

Другие вопросы по тегам