INTERFACE_AUTOMOC_MACRO_NAMES¶
在 3.27 版本中添加。
一个 用分号分隔的列表,包含宏名称,供 AUTOMOC
传播到使用者。
当启用了 AUTOMOC
的目标链接到设置了 INTERFACE_AUTOMOC_MACRO_NAMES
的库时,该目标会继承已列出的宏名称,并将其与在它自己的 AUTOMOC_MACRO_NAMES
属性中指定的好名称合并。然后,该目标将自动生成 MOC 文件,用于包含继承的宏名称以及在它自己的 AUTOMOC_MACRO_NAMES
属性中指定的宏名称的源文件,而不仅仅是在它自己的 AUTOMOC_MACRO_NAMES
属性中指定的宏名称。
默认情况下,INTERFACE_AUTOMOC_MACRO_NAMES
为空。
有关将 CMake 与 Qt 配合使用的更多信息,请参阅 cmake-qt(7)
手册。
示例 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_LINK_LIB
,shared_lib
来源将由moc
处理。static_lib
源包含STATIC_LINK_LIB
时,moc
将处理该源。app
源包含SHARED_LINK_LIB
、STATIC_LINK_LIB
或INTERFACE_LINK_LIB
时,moc
将处理该源。