Spec-Zone.ru › CMake 3.29

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API