Spec-Zone.ru › CMake

CheckCompilerFlag

Добавлен в версии 3.19.

Этот модуль предоставляет команду для проверки поддержки компилятором заданного флага.

Загрузите этот модуль в проект CMake с помощью:

include(CheckCompilerFlag)

Команды

Этот модуль предоставляет следующую команду:

check_compiler_flag

Однократно проверяет поддержку компилятором заданного флага:

check_compiler_flag(<lang> <flag> <variable>)

Эта команда однократно проверяет, принимается ли <flag> компилятором <lang> без выдачи диагностического сообщения. Результат проверки сохраняется во внутренней переменной кэша, указанной в <variable>.

Аргументы:

<lang>

Язык компилятора, используемого для проверки. Поддерживаются следующие языки: C, CXX, CUDA, Fortran, HIP, ISPC, OBJC и OBJCXX, а также Swift.

Добавлена в версии 3.21: поддержка языка HIP.

Добавлена в версии 3.26: поддержка языка Swift.

<flag>

Флаг или флаги компилятора для проверки. Несколько флагов можно указать одним аргументом в виде строки, используя список, разделённый точками с запятой.

<variable>

Имя внутренней переменной кэша для сохранения результата проверки: логическое значение true в случае успеха и логическое значение false в случае неудачи.

Успешный результат означает лишь, что компилятор не сообщил об ошибке при передаче ему флага. Влияние флага и соответствие этого влияния ожидаемому выходят за рамки данного модуля.

Примечание

Поскольку для проверки также используется команда try_compile(), которая применяет флаги из таких переменных, как CMAKE_<LANG>_FLAGS, неизвестные или неподдерживаемые флаги в этих переменных могут привести к ложноотрицательному результату проверки.

Переменные, влияющие на проверку

Перед вызовом этой команды можно задать следующие переменные, чтобы изменить способ выполнения проверки:

CMAKE_REQUIRED_FLAGS

Строка дополнительных флагов, передаваемых компилятору и разделённых пробелами. Список, разделённый точками с запятой, использовать нельзя. Содержимое CMAKE_<LANG>_FLAGS и связанных с ней переменных CMAKE_<LANG>_FLAGS_<CONFIG> для конкретной конфигурации автоматически добавляется перед содержимым этой переменной в команду компилятора.

CMAKE_REQUIRED_DEFINITIONS

Список, разделённый точками с запятой, определений компилятора, каждое из которых имеет вид -DFOO или -DFOO=bar. Определение для имени, указанного в аргументе команды проверки, задающем переменную результата, также добавляется автоматически.

CMAKE_REQUIRED_INCLUDES

Список, разделённый точками с запятой, путей поиска заголовочных файлов, передаваемых компилятору. Используются только эти пути поиска заголовочных файлов; содержимое свойства каталога INCLUDE_DIRECTORIES игнорируется.

CMAKE_REQUIRED_LINK_OPTIONS

Добавлена в версии 3.14.

Список, разделённый точками с запятой, параметров, добавляемых в команду компоновки (подробности см. в try_compile()).

CMAKE_REQUIRED_LIBRARIES

Список, разделённый точками с запятой, библиотек, добавляемых в команду компоновки. Это могут быть имена системных библиотек или импортированные цели (подробности см. в try_compile()).

CMAKE_REQUIRED_LINK_DIRECTORIES

Добавлена в версии 3.31.

Список, разделённый точками с запятой, путей поиска библиотек, передаваемых компоновщику (подробности см. в try_compile()).

CMAKE_REQUIRED_QUIET

Добавлена в версии 3.1.

Если значение этой переменной соответствует логическому значению true, все сообщения о состоянии, связанные с проверкой, подавляются.

CMAKE_TRY_COMPILE_TARGET_TYPE

Для выполнения проверки внутри используется команда try_compile(), а эта переменная задаёт тип создаваемой ею цели. Если для переменной задано значение EXECUTABLE (по умолчанию), проверка компилирует и компонуем тестовый исходный код как исполняемую программу. Если задано значение STATIC_LIBRARY, тестовый исходный код компилируется, но не компонуется.

Примеры

В следующем примере показано, как использовать этот модуль для проверки поддержки компилятором C флага -fno-optimize-strlen, отключающего оптимизации, связанные с функцией C strlen() в компиляторах GCC и Clang. Результат проверки сохраняется во внутренней переменной кэша HAVE_FNO_OPTIMIZE_STRLEN, а флаг условно включается с помощью команды target_compile_options(). Генераторное выражение $<COMPILE_LANGUAGE:...> гарантирует, что флаг добавляется только к исходным файлам C.

include(CheckCompilerFlag)
check_compiler_flag(C -fno-optimize-strlen HAVE_FNO_OPTIMIZE_STRLEN)

if(HAVE_FNO_OPTIMIZE_STRLEN)
  target_compile_options(
    example
    PRIVATE $<$<COMPILE_LANGUAGE:C>:-fno-optimize-strlen>
  )
endif()

См. также

  • Модуль CheckLinkerFlag предназначен для проверки поддержки компилятором флага компоновщика.

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/module/CheckCompilerFlag.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API