Spec-Zone.ru › CMake

CMakePushCheckState

Этот модуль предоставляет команды для управления состоянием переменных, влияющих на выполнение различных команд проверки CMake (например, check_symbol_exists() и т. д.).

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

include(CMakePushCheckState)

Этот модуль предоставляет следующие команды, полезные для конфигурации в заданной области видимости, например в модулях CMake или при выполнении проверок в контролируемой среде. Они гарантируют, что временные изменения ограничены областью видимости проверки и не распространяются на другие части системы сборки:

  • cmake_push_check_state()
  • cmake_reset_check_state()
  • cmake_pop_check_state()

Затрагиваемые переменные

Следующие переменные CMake сохраняются, сбрасываются и восстанавливаются командами этого модуля:

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_EXTRA_INCLUDE_FILES

Добавлено в версии 3.6: Ранее уже использовалась командой check_type_size(); теперь поддерживается и этим модулем.

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

Примечание

Другие переменные CMake, например CMAKE_<LANG>_FLAGS, влияют на все проверки независимо от команд, предоставляемых этим модулем, поскольку эти фундаментальные переменные предназначены для управления глобальным состоянием системы сборки.

Команды

cmake_push_check_state

Помещает (сохраняет) текущие состояния перечисленных выше переменных в стек:

cmake_push_check_state([RESET])

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

RESET

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

cmake_reset_check_state

Сбрасывает (очищает), задавая пустые значения, содержимое перечисленных выше переменных:

cmake_reset_check_state()

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

cmake_pop_check_state

Восстанавливает состояния перечисленных выше переменных до значений, которые они имели во время последнего вызова cmake_push_check_state():

cmake_pop_check_state()

Используйте эту команду, чтобы отменить временные изменения, внесённые во время проверки. Во избежание неожиданного поведения используйте каждый вызов cmake_push_check_state() в паре с соответствующим вызовом cmake_pop_check_state().

Примеры

Пример: изолированная проверка с определениями компиляции

В следующем примере выполняется проверка символа C memfd_create() с дополнительным определением компиляции _GNU_SOURCE, не затрагивая глобальные флаги компиляции. Параметр RESET используется, чтобы явно очистить все предыдущие значения переменных, связанных с проверками, перед выполнением проверки.

include(CMakePushCheckState)

# Save and reset the current state
cmake_push_check_state(RESET)

# Perform check with specific compile definitions
set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
include(CheckSymbolExists)
check_symbol_exists(memfd_create "sys/mman.h" HAVE_MEMFD_CREATE)

# Restore the original state
cmake_pop_check_state()

Пример: вложенные области конфигурации

В следующем примере состояния переменных несколько раз помещаются в стек, что позволяет выполнять последовательные или вложенные проверки. Каждый вызов cmake_pop_check_state() восстанавливает последние состояния, помещённые в стек.

include(CMakePushCheckState)

# Save and reset the current state
cmake_push_check_state(RESET)

# Perform the first check with additional libraries
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS})
include(CheckSymbolExists)
check_symbol_exists(dlopen "dlfcn.h" HAVE_DLOPEN)

# Save current state
cmake_push_check_state()

# Perform the second check with libraries and additional compile definitions
set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
check_symbol_exists(dladdr "dlfcn.h" HAVE_DLADDR)

message(STATUS "${CMAKE_REQUIRED_DEFINITIONS}")
# Output: -D_GNU_SOURCE

# Restore the previous state
cmake_pop_check_state()

message(STATUS "${CMAKE_REQUIRED_DEFINITIONS}")
# Output here is empty

# Reset variables to prepare for the next check
cmake_reset_check_state()

# Perform the next check only with additional compile definitions
set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
check_symbol_exists(dl_iterate_phdr "link.h" HAVE_DL_ITERATE_PHDR)

# Restore the original state
cmake_pop_check_state()

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

Spec-Zone.ru

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