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
#includestatement like#include "moc_<basename>.cpp"is found, a macro fromAUTOMOC_MACRO_NAMESis expected to appear in the<basename>.h(xx)header file.mocis run on the header file to generatemoc_<basename>.cppin the<AUTOGEN_BUILD_DIR>/includedirectory which is automatically added to the target’sINCLUDE_DIRECTORIES. This allows the compiler to find the includedmoc_<basename>.cppfile regardless of the location the original source.- For
multi configuration generators, the include directory is<AUTOGEN_BUILD_DIR>/include_<CONFIG>. - See
AUTOGEN_BUILD_DIR.
- For
- If an
#includestatement like#include "<basename>.moc"is found, a macro fromAUTOMOC_MACRO_NAMESis expected to appear in the source file andmocis 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 ofAUTOMOC_MACRO_NAMES. The resultingmoc_<basename>.cppfiles are generated in custom directories and automatically included in a generated<AUTOGEN_BUILD_DIR>/mocs_compilation.cppfile, which is compiled as part of the target.- The custom directories with checksum
based names help to avoid name collisions for
mocfiles with the same<basename>. - See
AUTOGEN_BUILD_DIR.
- The custom directories with checksum
based names help to avoid name collisions for
- Additionally, header files with the same base name as a source file,
(like
<basename>.h) or_pappended to the base name (like<basename>_p.h), are scanned for a macro out ofAUTOMOC_MACRO_NAMES, and if found,mocis also executed on those files. AUTOMOCalways checks multiple header alternative extensions, such ashpp,hxx, etc. when searching for headers.AUTOMOClooks for theQ_PLUGIN_METADATAmacro and reruns themocwhen the file addressed by theFILEargument 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.
See the cmake-qt(7) manual for more information on using CMake
with Qt.