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 <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 . 结果 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> .
  • Additionally, header files with the same base name as a source file, (像 <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.

moc executable will be detected automatically, but can be forced to a certain binary using the AUTOMOC_EXECUTABLE 特性。

Additional command line options for moc can be set via the AUTOMOC_MOC_OPTIONS 特性。

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.

全局特性在该规范中的 load 定义。 AUTOGEN_TARGETS_FOLDER can be used to group the automoc targets together in an IDE, e.g. in MSVS.

全局特性在该规范中的 load 定义。 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 .

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