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, theQ_OBJECT
class declaration is expected in the header, andmoc
is run on the header file. Amoc_foo.cpp
file will be generated from the source’s header into the<CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include
directory which is automatically added to the target’sINCLUDE_DIRECTORIES
. This allows the compiler to find the includedmoc_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 aQ_OBJECT
is expected in the current source file andmoc
is run on the file itself. Additionally, header files with the same base name (likefoo.h
) or_p
appended to the base name (likefoo_p.h
) are parsed forQ_OBJECT
macros, and if found,moc
is also executed on those files.AUTOMOC
checks multiple header alternative extensions, such ashpp
,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 generatedmoc_compilation.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.
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.