Spec-Zone.ru › CMake 3.31

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/v3.31/command/define_property.html

Spec-Zone.ru

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