INTERFACE_AUTOMOC_MACRO_NAMES
Добавлено в версии 3.27.
Список, разделённый точками с запятой, содержащий имена макросов, которые AUTOMOC должен передавать потребителям.
Если цель с включённым свойством AUTOMOC связывается с библиотекой, для которой задано свойство INTERFACE_AUTOMOC_MACRO_NAMES, цель наследует перечисленные имена макросов и объединяет их с именами, указанными в её собственном свойстве AUTOMOC_MACRO_NAMES. Затем цель будет автоматически создавать файлы MOC и для исходных файлов, содержащих унаследованные имена макросов, а не только для файлов с именами макросов, указанными в её собственном свойстве AUTOMOC_MACRO_NAMES.
По умолчанию INTERFACE_AUTOMOC_MACRO_NAMES пусто.
Дополнительные сведения об использовании CMake с Qt см. в руководстве cmake-qt(7).
Пример 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–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/prop_tgt/INTERFACE_AUTOMOC_MACRO_NAMES.html