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.
