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