include_guard
Предоставляет include-защиту для файла, обрабатываемого в настоящее время CMake.
include_guard([DIRECTORY|GLOBAL])
Настраивает include-защиту для текущего файла CMake (см. документацию переменной CMAKE_CURRENT_LIST_FILE).
CMake завершит обработку текущего файла в позиции команды include_guard(), если текущий файл уже был обработан для соответствующего контекста (см. ниже). Это обеспечивает функциональность, подобную include-защитам, обычно используемым в заголовках исходных файлов, или директиве #pragma once. Если текущий файл был обработан ранее для соответствующего контекста, эффект будет таким, как будто была вызвана команда return(). Не вызывайте эту команду внутри функции, определяемой в текущем файле.
Можно указать необязательный аргумент, определяющий область действия защиты. Возможные значения для опции:
-
DIRECTORY - Защита include применима в текущей директории и ниже. Файл будет включен только один раз в этой области директории, но может быть включён повторно другими файлами за пределами этой директории (например, родительской директории или другой директории, не подключаемой через
add_subdirectory()илиinclude()из текущего файла или его потомков). -
GLOBAL - Защита include применима глобально ко всему билду. Текущий файл будет включен только один раз независимо от области действия.
Если аргументы не указаны, include_guard имеет такой же область действия, как переменная, то есть эффект include-защиты изолирован последней областью действия функции или текущей директорией, если нет внутренних областей действия функций. В этом случае поведение команды такое же, как:
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.12/command/include_guard.html