AUTOMOC
-------

Should the target be processed with automoc (for Qt projects).

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.

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

See the :manual:`cmake-qt(7)` manual for more information on using CMake
with Qt.
