mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-07 22:59:56 -05:00
cd32886b2f
Allow to force moc/rcc/uic compiler used for AUTO(MOC|RCC|UIC). Setting these properties is only necessary if you are going to do strange things like build these tools as part of your own build system. Setting these properties will also prevent cmake from testing the binary: It is user-provided and assumed to be valid.
98 lines
4.2 KiB
ReStructuredText
98 lines
4.2 KiB
ReStructuredText
AUTOMOC
|
|
-------
|
|
|
|
Should the target be processed with automoc (for Qt projects).
|
|
|
|
:prop_tgt:`AUTOMOC` is a boolean specifying whether CMake will handle the Qt
|
|
``moc`` preprocessor automatically, i.e. without having to use the
|
|
:module:`QT4_WRAP_CPP() <FindQt4>` or QT5_WRAP_CPP() macro.
|
|
Currently Qt4 and Qt5 are supported.
|
|
|
|
When this property is set ``ON``, CMake will scan the header and
|
|
source files at build time and invoke moc accordingly.
|
|
|
|
* If an ``#include`` statement like ``#include "moc_<basename>.cpp"`` is found,
|
|
a macro from :prop_tgt:`AUTOMOC_MACRO_NAMES` is expected to appear in the
|
|
``<basename>.h(xx)`` header file. ``moc`` is run on the header
|
|
file to generate ``moc_<basename>.cpp`` in the
|
|
``<AUTOGEN_BUILD_DIR>/include`` directory which is automatically added
|
|
to the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
|
|
This allows the compiler to find the included ``moc_<basename>.cpp`` file
|
|
regardless of the location the original source.
|
|
|
|
* For :prop_gbl:`multi configuration generators <GENERATOR_IS_MULTI_CONFIG>`,
|
|
the include directory is ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>``.
|
|
|
|
* See :prop_tgt:`AUTOGEN_BUILD_DIR`.
|
|
|
|
* If an ``#include`` statement like ``#include "<basename>.moc"`` is found,
|
|
a macro from :prop_tgt:`AUTOMOC_MACRO_NAMES` is expected to appear in the
|
|
source file and ``moc`` is run on the source file itself.
|
|
|
|
* Header files that are not included by an ``#include "moc_<basename>.cpp"``
|
|
statement are nonetheless scanned for a macro out of
|
|
:prop_tgt:`AUTOMOC_MACRO_NAMES`.
|
|
The resulting ``moc_<basename>.cpp`` files are generated in custom
|
|
directories and automatically included in a generated
|
|
``<AUTOGEN_BUILD_DIR>/mocs_compilation.cpp`` file,
|
|
which is compiled as part of the target.
|
|
|
|
* The custom directories with checksum
|
|
based names help to avoid name collisions for ``moc`` files with the same
|
|
``<basename>``.
|
|
|
|
* See :prop_tgt:`AUTOGEN_BUILD_DIR`.
|
|
|
|
* Additionally, header files with the same base name as a source file,
|
|
(like ``<basename>.h``) or ``_p`` appended to the base name (like
|
|
``<basename>_p.h``), are scanned for a macro out of
|
|
:prop_tgt:`AUTOMOC_MACRO_NAMES`, and if found, ``moc``
|
|
is also executed on those files.
|
|
|
|
* ``AUTOMOC`` always checks multiple header alternative extensions,
|
|
such as ``hpp``, ``hxx``, etc. when searching for headers.
|
|
|
|
* ``AUTOMOC`` looks for the ``Q_PLUGIN_METADATA`` macro and reruns the
|
|
``moc`` when the file addressed by the ``FILE`` argument of the macro changes.
|
|
|
|
This property is initialized by the value of the :variable:`CMAKE_AUTOMOC`
|
|
variable if it is set when a target is created.
|
|
|
|
The ``moc`` executable will be detected automatically, but can be forced to
|
|
a certain binary using the :prop_tgt:`AUTOMOC_EXECUTABLE` property.
|
|
|
|
Additional command line options for ``moc`` can be set via the
|
|
:prop_tgt:`AUTOMOC_MOC_OPTIONS` property.
|
|
|
|
By enabling the :variable:`CMAKE_AUTOMOC_RELAXED_MODE` variable the
|
|
rules for searching the files which will be processed by ``moc`` can be relaxed.
|
|
See the documentation for this variable for more details.
|
|
|
|
The global property :prop_gbl:`AUTOGEN_TARGETS_FOLDER` can be used to group the
|
|
automoc targets together in an IDE, e.g. in MSVS.
|
|
|
|
The global property :prop_gbl:`AUTOGEN_SOURCE_GROUP` can be used to group
|
|
files generated by :prop_tgt:`AUTOMOC` together in an IDE, e.g. in MSVS.
|
|
|
|
Additional macro names to search for can be added to
|
|
:prop_tgt:`AUTOMOC_MACRO_NAMES`.
|
|
|
|
Additional ``moc`` dependency file names can be extracted from source code
|
|
by using :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
|
|
|
|
Compiler pre definitions for ``moc`` are written to a ``moc_predefs.h`` file
|
|
which is controlled by :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES`.
|
|
|
|
Source C++ files can be excluded from :prop_tgt:`AUTOMOC` processing by
|
|
enabling :prop_sf:`SKIP_AUTOMOC` or the broader :prop_sf:`SKIP_AUTOGEN`.
|
|
|
|
The number of parallel ``moc`` processes to start can be modified by
|
|
setting :prop_tgt:`AUTOGEN_PARALLEL`.
|
|
|
|
A global ``autogen`` target that depends on all :prop_tgt:`AUTOMOC` generated
|
|
``<ORIGIN>_autogen`` targets in the project can be generated by enabling
|
|
:variable:`CMAKE_GLOBAL_AUTOGEN_TARGET`.
|
|
|
|
See the :manual:`cmake-qt(7)` manual for more information on using CMake
|
|
with Qt.
|