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