Spec-Zone.ru › CMake 3.31

INTERFACE_AUTOMOC_MACRO_NAMES

Добавлена в версии 3.27.

Список макросов, разделённых точкой с запятой, для списка макросов, подлежащих распространению к потребителям.

Когда целевой объект с включённым AUTOMOC связывается с библиотекой, устанавливающей INTERFACE_AUTOMOC_MACRO_NAMES, целевой объект наследует перечисленные имена макросов и объединяет их с указанными в его собственном свойстве AUTOMOC_MACRO_NAMES. Затем целевой объект автоматически сгенерирует файлы MOC для исходных файлов, содержащих унаследованные имена макросов, а не только имена макросов, указанные в его собственном свойстве AUTOMOC_MACRO_NAMES.

По умолчанию INTERFACE_AUTOMOC_MACRO_NAMES пустое.

См. руководство cmake-qt(7) для получения дополнительной информации об использовании CMake с Qt.

Пример 1

В этом примере myapp наследует имена макросов STATIC_LIB_1 и STATIC_LIB_2 из static_lib. Инструмент moc будет автоматически запущен для всех myapp исходных файлов, содержащих STATIC_LIB_1 или STATIC_LIB_2.

set(AUTOMOC ON)
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE static_lib)

add_library(static_lib STATIC static.cpp)
set_property(TARGET static_lib PROPERTY
  INTERFACE_AUTOMOC_MACRO_NAMES "STATIC_LIB_1;STATIC_LIB_2"
)

Пример 2

В этом примере свойство целевого объекта INTERFACE_AUTOMOC_MACRO_NAMES различных библиотек *_deep_lib будет распространено на shared_lib, static_lib и interface_lib. Поскольку отношения связывания указаны как PUBLIC и INTERFACE, эти имена макросов также будут распространяться транзитивно до app.

set(AUTOMOC ON)

add_library(shared_deep_lib SHARED deep_lib.cpp)
add_library(static_deep_lib STATIC deep_lib.cpp)
add_library(interface_deep_lib INTERFACE)

set_property(TARGET shared_deep_lib PROPERTY
  INTERFACE_AUTOMOC_MACRO_NAMES "SHARED_LINK_LIB"
)
set_property(TARGET static_deep_lib PROPERTY
  INTERFACE_AUTOMOC_MACRO_NAMES "STATIC_LINK_LIB"
)
set_property(TARGET interface_deep_lib PROPERTY
  INTERFACE_AUTOMOC_MACRO_NAMES "INTERFACE_LINK_LIB"
)

add_library(shared_lib SHARED lib.cpp)
add_library(static_lib STATIC lib.cpp)
add_library(interface_lib INTERFACE)

# PUBLIC and INTERFACE here ensure the macro names propagate to any
# consumers of shared_lib, static_lib or interface_lib too
target_link_libraries(shared_lib PUBLIC shared_deep_lib)
target_link_libraries(static_lib PUBLIC static_deep_lib)
target_link_libraries(interface_lib INTERFACE interface_deep_lib)

# This consumer will receive all three of the above custom macro names as
# transitive usage requirements
add_executable(app main.cpp)
target_link_libraries(app PRIVATE shared_lib static_lib interface_lib)

В вышеприведённом примере:

  • shared_lib исходные файлы будут обработаны moc если они содержат SHARED_LINK_LIB.
  • static_lib исходные файлы будут обработаны moc если они содержат STATIC_LINK_LIB.
  • app исходные файлы будут обработаны moc если они содержат SHARED_LINK_LIB, STATIC_LINK_LIB или INTERFACE_LINK_LIB.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/prop_tgt/INTERFACE_AUTOMOC_MACRO_NAMES.html

Spec-Zone.ru

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