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