Spec-Zone.ru › CMake

define_property

Определение и документирование пользовательских свойств.

define_property(<GLOBAL | DIRECTORY | TARGET | SOURCE |
                 TEST | VARIABLE | CACHED_VARIABLE>
                 PROPERTY <name> [INHERITED]
                 [BRIEF_DOCS <brief-doc> [docs...]]
                 [FULL_DOCS <full-doc> [docs...]]
                 [INITIALIZE_FROM_VARIABLE <variable>])

Определяет одно свойство в области для использования с командами set_property() и get_property(). Она в основном полезна для определения способа инициализации или наследования свойства. Исторически эта команда также связывала документацию со свойством, но это больше не считается основным случаем использования.

Первый аргумент определяет тип области, в которой должно использоваться свойство. Он должен быть одним из следующих:

GLOBAL    = associated with the global namespace
DIRECTORY = associated with one directory
TARGET    = associated with one target
SOURCE    = associated with one source file
TEST      = associated with a test named with add_test
VARIABLE  = documents a CMake language variable
CACHED_VARIABLE = documents a CMake cache variable

Обратите внимание, что в отличие от set_property() и get_property(), никакая фактическая область не должна быть указана; важен только тип области.

Требуемый PROPERTY параметр сразу же следует за именем определяемого свойства.

Если указан параметр INHERITED, то команда get_property() будет переходить к следующей вышестоящей области, когда запрашиваемое свойство не установлено в указанной области команды.

  • DIRECTORY область переходит к области родительского каталога, продолжая поиск вверх по родительским каталогам до тех пор, пока свойство не будет установлено в каталоге, или пока не останется больше родителей. Если свойство так и не будет найдено в главном каталоге, оно переходит к области GLOBAL.
  • TARGET, SOURCE и TEST свойства переходят к области DIRECTORY, включая дальнейшее переключение по каталогам и т.д. по мере необходимости.

Обратите внимание, что это поведение цепочки областей применяется только к вызовам get_property(), get_directory_property(), get_target_property(), get_source_file_property() и get_test_property(). Поведение наследования не применяется при установлении свойств, поэтому использование APPEND или APPEND_STRING с командой set_property() не будет учитывать наследуемые значения при определении содержимого для добавления.

Параметры BRIEF_DOCS и FULL_DOCS следуют за строками, которые должны быть связаны со свойством как краткое и полное описание. CMake не использует эту документацию, кроме как предоставления её проекту через соответствующие параметры команды get_property().

Изменено в версии 3.23: Параметры BRIEF_DOCS и FULL_DOCS являются необязательными.

Добавлен в версии 3.23: Параметр INITIALIZE_FROM_VARIABLE указывает переменную, из которой должно быть инициализировано свойство. Он может использоваться только со свойствами целевых объектов. Имя <variable> должно заканчиваться именем свойства и не должно начинаться с CMAKE_ или _CMAKE_. Имя свойства должно содержать как минимум один символ подчеркивания. Рекомендуется, чтобы имя свойства имело префикс, специфичный для проекта.

Переопределение свойства

После определения свойства для определенного типа области, его нельзя переопределить. Попытки переопределить существующее свойство вызовом define_property() с тем же типом области и именем свойства будут проигнорированы. Определение одного и того же имени свойства для двух разных типов области допустимо.

get_property() можно использовать для определения того, уже определено ли свойство для определенного типа области, и если да, то для проверки его определения. Например:

# Initial definition
define_property(TARGET PROPERTY MY_NEW_PROP
  BRIEF_DOCS "My new custom property"
)

# Later examination
get_property(my_new_prop_exists
  TARGET NONE
  PROPERTY MY_NEW_PROP
  DEFINED
)

if(my_new_prop_exists)
  get_property(my_new_prop_docs
    TARGET NONE
    PROPERTY MY_NEW_PROP
    BRIEF_DOCS
  )
  # ${my_new_prop_docs} is now set to "My new custom property"
endif()

См. также

  • get_property()
  • set_property()

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/define_property.html

Spec-Zone.ru

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