include_guard
Обеспечивает защитный механизм включения для файла, который в настоящее время обрабатывается 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.14/command/include_guard.html