You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.1 KiB
90 lines
3.1 KiB
INTERFACE_AUTOMOC_MACRO_NAMES
|
|
-----------------------------
|
|
|
|
.. versionadded:: 3.27
|
|
|
|
A :ref:`semicolon-separated list <CMake Language Lists>` of macro names for
|
|
:prop_tgt:`AUTOMOC` to be propagated to consumers.
|
|
|
|
When a target with :prop_tgt:`AUTOMOC` enabled links to a library that sets
|
|
``INTERFACE_AUTOMOC_MACRO_NAMES``, the target inherits the listed macro names
|
|
and merges them with those specified in its own :prop_tgt:`AUTOMOC_MACRO_NAMES`
|
|
property. The target will then automatically generate MOC files for source
|
|
files that contain the inherited macro names too, not just the macro names
|
|
specified in its own :prop_tgt:`AUTOMOC_MACRO_NAMES` property.
|
|
|
|
By default ``INTERFACE_AUTOMOC_MACRO_NAMES`` is empty.
|
|
|
|
See the :manual:`cmake-qt(7)` manual for more information on using CMake
|
|
with Qt.
|
|
|
|
Example 1
|
|
^^^^^^^^^
|
|
|
|
In this example, ``myapp`` inherits the macro names ``STATIC_LIB_1`` and
|
|
``STATIC_LIB_2`` from ``static_lib``. The ``moc`` tool will then automatically
|
|
be run on any of the ``myapp`` sources which contain ``STATIC_LIB_1`` or
|
|
``STATIC_LIB_2``.
|
|
|
|
.. code-block:: cmake
|
|
|
|
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"
|
|
)
|
|
|
|
Example 2
|
|
^^^^^^^^^
|
|
|
|
In this example, the ``INTERFACE_AUTOMOC_MACRO_NAMES`` target property of the
|
|
various ``*_deep_lib`` libraries will propagate to ``shared_lib``,
|
|
``static_lib`` and ``interface_lib``. Because the linking relationships are
|
|
specified as ``PUBLIC`` and ``INTERFACE``, those macro names will also further
|
|
propagate transitively up to ``app``.
|
|
|
|
.. code-block:: cmake
|
|
|
|
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)
|
|
|
|
In the above:
|
|
|
|
* ``shared_lib`` sources will be processed by ``moc`` if they contain
|
|
``SHARED_LINK_LIB``.
|
|
* ``static_lib`` sources will be processed by ``moc`` if they contain
|
|
``STATIC_LINK_LIB``.
|
|
* ``app`` sources will be processed by ``moc`` if they contain
|
|
``SHARED_LINK_LIB``, ``STATIC_LINK_LIB`` or ``INTERFACE_LINK_LIB``.
|