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.22/command/include_guard.html