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(7)
手冊,以取得關於將 CMake 與 Qt 搭配使用的更多資訊。
範例 1¶
在此範例中,myapp
從 static_lib
繼承巨集名稱 STATIC_LIB_1
和 STATIC_LIB_2
。moc
工具接著將自動在任何包含 STATIC_LIB_1
或 STATIC_LIB_2
的 myapp
原始檔上執行。
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¶
在此範例中,各種 *_deep_lib
函式庫的 INTERFACE_AUTOMOC_MACRO_NAMES
目標屬性將傳播到 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
原始檔包含SHARED_LINK_LIB
,則會由moc
處理。如果
static_lib
原始檔包含STATIC_LINK_LIB
,則會由moc
處理。如果
app
原始檔包含SHARED_LINK_LIB
、STATIC_LINK_LIB
或INTERFACE_LINK_LIB
,則會由moc
處理。