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,
  the ``Q_OBJECT`` or ``Q_GADGET`` macros are expected in an otherwise empty
  line of 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.

  * See :prop_tgt:`AUTOGEN_BUILD_DIR`.

* If an ``#include`` statement like ``#include "<basename>.moc"`` is found,
  then ``Q_OBJECT`` or ``Q_GADGET`` macros are expected in the current 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 ``Q_OBJECT`` or ``Q_GADGET`` macros.
  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 parsed for ``Q_OBJECT`` or ``Q_GADGET`` macros,
  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 ``moc`` dependency file names can be extracted from source code
by using :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.

Source C++ files can be excluded from :prop_tgt:`AUTOMOC` processing by
enabling :prop_sf:`SKIP_AUTOMOC` or the broader :prop_sf:`SKIP_AUTOGEN`.

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