Spec-Zone.ru › CMake 3.23

include_guard

Новое в версии 3.10.

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

include_guard([DIRECTORY|GLOBAL])

Настраивает защитный механизм включения для текущего файла CMake (см. документацию переменной CMAKE_CURRENT_LIST_FILE).

CMake завершит обработку текущего файла в месте вызова команды include_guard(), если текущий файл уже был обработан для соответствующего уровня доступа (см. ниже). Это обеспечивает функциональность, аналогичную защитным механизмам включения, обычно используемым в заголовках исходных файлов, или директиве #pragma once. Если текущий файл был обработан ранее для соответствующего уровня доступа, эффект будет таким же, как если бы была вызвана команда return(). Не вызывайте эту команду изнутри функции, определённой в текущем файле.

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

DIRECTORY

Защитный механизм включения применяется в текущем каталоге и ниже. Файл будет включён только один раз в пределах области действия текущего каталога, но может быть включён повторно другими файлами за пределами этого каталога (например, родительским каталогом или другим каталогом, не подключаемым командами add_subdirectory() или include() из текущего файла или его дочерних элементов).

GLOBAL

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

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

if(__CURRENT_FILE_VAR__)
  return()
endif()
set(__CURRENT_FILE_VAR__ TRUE)

© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.20/command/include_guard.html

Spec-Zone.ru

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