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