Spec-Zone.ru › CMake 3.19

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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.19/command/include_guard.html

Spec-Zone.ru

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