CheckCXXSymbolExists
Этот модуль предоставляет команду для проверки существования символа C++.
Загрузите этот модуль в проект CMake с помощью:
include(CheckCXXSymbolExists)
Команды
Этот модуль предоставляет следующую команду:
-
check_cxx_symbol_exists -
Однократно проверяет, существует ли символ в качестве функции, переменной или макроса препроцессора в C++:
check_cxx_symbol_exists(<symbol> <headers> <variable>)
Эта команда проверяет, доступен ли
<symbol>после включения указанных файлов заголовков<headers>, и сохраняет результат во внутренней переменной кэша<variable>. В одном аргументе можно указать несколько файлов заголовков в виде строки, используя список, разделённый точками с запятой.Если файлы заголовков определяют символ как макрос, он считается доступным и предполагается, что он работает. Если символ объявлен как функция или переменная, проверка также удостоверяется, что он успешно компонуется (то есть символ должен существовать в компонуемой библиотеке или объектном файле).
Типы, значения перечислений и шаблоны C++ не распознаются. Для них можно использовать модуль
CheckTypeSizeилиCheckSourceCompiles.Эта команда предназначена для проверки символов в том виде, в каком они используются в C++. Для символов C используйте модуль
CheckSymbolExists.Примечание
Эта команда ненадёжна для символов, которые могут быть перегруженными функциями. Поскольку невозможно надёжно предсказать, может ли данная функция в системном окружении быть определена как перегруженная функция, оказаться перегруженной функцией в других системах или стать таковой в будущем, обычно рекомендуется использовать модуль
CheckSourceCompilesдля проверки любого символа функции (если только вы не уверены, что проверяемая функция не перегружена в других системах и не станет таковой в будущем).Переменные, влияющие на проверку
Перед вызовом этой команды можно задать следующие переменные, чтобы изменить способ выполнения проверки:
-
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.
Если значение этой переменной является логической истиной, все сообщения о состоянии, связанные с проверкой, будут подавлены.
-
Примеры
В следующем примере показано, как с помощью этого модуля проверить наличие макроса препроцессора SEEK_SET и функции C++ std::fopen() из файла заголовка <cstdio>:
include(CheckCXXSymbolExists) # Check for macro SEEK_SET check_cxx_symbol_exists(SEEK_SET "cstdio" HAVE_SEEK_SET) # Check for function std::fopen check_cxx_symbol_exists(std::fopen "cstdio" HAVE_STD_FOPEN)
См. также
- Модуль
CheckSymbolExistsдля проверки существования символа C.
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/module/CheckCXXSymbolExists.html