| 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``. |