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
source files at build time and invoke moc accordingly.
- If an #include statement like #include "moc_foo.cpp" is found,
the Q_OBJECT class declaration is expected in the header, and
moc is run on the header file. A moc_foo.cpp file will be
generated from the source’s header into the
CMAKE_CURRENT_BINARY_DIR directory. This allows the
compiler to find the included moc_foo.cpp file regardless of the
location the original source. However, if multiple source files
in different directories do this then their generated moc files would
collide. In this case a diagnostic will be issued.
- If an #include statement like #include "foo.moc" is found,
then a Q_OBJECT is expected in the current source file and moc
is run on the file itself. Additionally, header files with the same
base name (like foo.h) or _p appended to the base name (like
foo_p.h) are parsed for Q_OBJECT macros, and if found, moc
is also executed on those files. AUTOMOC checks multiple header
alternative extensions, such as hpp, hxx etc when searching
for headers. The resulting moc files, which are not included as shown
above in any of the source files are included in a generated
<targetname>_automoc.cpp file, which is compiled as part of the
target.
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.
See the cmake-qt(7) manual for more information on using CMake
with Qt.