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