Spec-Zone.ru › CMake

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

Spec-Zone.ru

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