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.

The moc executable will be detected automatically, but can be forced to a certain binary using the AUTOMOC_EXECUTABLE property.

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.

A global autogen target that depends on all AUTOMOC generated <ORIGIN>_autogen targets in the project can be generated by enabling CMAKE_GLOBAL_AUTOGEN_TARGET.

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