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, 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 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, 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 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 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 moc dependency file names can be extracted from source code by using AUTOMOC_DEPEND_FILTERS.

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

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