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
QT4_WRAP_CPP() 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 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 INCLUDE_DIRECTORIES.
This allows the compiler to find the included moc_<basename>.cpp file
regardless of the location the original source.
- If an #include statement like #include "<basename>.moc" is found,
a macro from 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
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 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
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 CMAKE_AUTOMOC
variable if it is set when a target is created.
Additional command line options for moc can be set via the
AUTOMOC_MOC_OPTIONS property.
By enabling the 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 AUTOGEN_TARGETS_FOLDER can be used to group the
automoc targets together in an IDE, e.g. in MSVS.
The global property AUTOGEN_SOURCE_GROUP can be used to group
files generated by AUTOMOC together in an IDE, e.g. in MSVS.
Additional macro names to search for can be added to
AUTOMOC_MACRO_NAMES.
Additional moc dependency file names can be extracted from source code
by using AUTOMOC_DEPEND_FILTERS.
Compiler pre definitions for moc are written to a moc_predefs.h file
which is controlled by AUTOMOC_COMPILER_PREDEFINES.
Source C++ files can be excluded from AUTOMOC processing by
enabling SKIP_AUTOMOC or the broader SKIP_AUTOGEN.
The number of parallel moc processes to start can be modified by
setting AUTOGEN_PARALLEL.
See the cmake3-qt(7) manual for more information on using CMake
with Qt.