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