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, theQ_OBJECT
orQ_GADGET
macros are expected in an otherwise empty line of the<basename>.h(xx)
header file.moc
is run on the header file to generatemoc_<basename>.cpp
in the<AUTOGEN_BUILD_DIR>/include
directory which is automatically added to the target’sINCLUDE_DIRECTORIES
. This allows the compiler to find the includedmoc_<basename>.cpp
file regardless of the location the original source.- See
AUTOGEN_BUILD_DIR
.
- See
- If an
#include
statement like#include "<basename>.moc"
is found, thenQ_OBJECT
orQ_GADGET
macros are expected in the current source file andmoc
is run on the source file itself. - Header files that are not included by an
#include "moc_<basename>.cpp"
statement are nonetheless scanned forQ_OBJECT
orQ_GADGET
macros. The resultingmoc_<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
.
- The custom directories with checksum based names help to avoid name collisions for moc files with the same
- 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 forQ_OBJECT
orQ_GADGET
macros, and if found,moc
is also executed on those files. -
AUTOMOC
always checks multiple header alternative extensions, such ashpp
,hxx
, etc. when searching for headers. -
AUTOMOC
looks for theQ_PLUGIN_METADATA
macro and reruns themoc
when the file addressed by theFILE
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.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.9/prop_tgt/AUTOMOC.html