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