AUTOMOC
Нужно ли обрабатывать целевой объект с помощью automoc (для проектов Qt)?
AUTOMOC — это булево значение, указывающее, будет ли CMake автоматически обрабатывать препроцессор Qt moc, т.е. без необходимости использования макроса QT4_WRAP_CPP() или QT5_WRAP_CPP(). В настоящее время поддерживаются Qt4 и Qt5.
Когда эта свойство установлено ON, CMake будет сканировать исходные файлы во время сборки и вызывать moc соответственно.
- Если обнаружено утверждение
#include, подобное#include "moc_foo.cpp", ожидается объявление классаQ_OBJECTв заголовке, и для файла заголовка будет выполненоmoc. Из исходного заголовка будет сгенерирован файлmoc_foo.cppв каталог<CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include, который автоматически добавляется вINCLUDE_DIRECTORIESцелевого объекта. Это позволяет компилятору найти включенный файлmoc_foo.cppнезависимо от расположения исходного файла. Однако, если несколько исходных файлов в разных каталогах выполняют это действие, их сгенерированные файлы moc могут конфликтовать. В этом случае будет выдано диагностическое сообщение. - Если обнаружено утверждение
#include, подобное#include "foo.moc", ожидаетсяQ_OBJECTв текущем исходном файле, и для самого файла будет выполненоmoc. Кроме того, файлы заголовков с тем же базовым именем (например,foo.h) или с добавленным к базовому имени_p(например,foo_p.h) анализируются на наличие макросовQ_OBJECT, и если они найдены, для этих файлов также выполняетсяmoc.AUTOMOCпроверяет несколько альтернативных расширений файлов заголовков, таких какhpp,hxxи т.д., при поиске заголовков. Результирующие файлы moc, которые не включены, как показано выше, ни в один из исходных файлов, включаются в сгенерированный файлmoc_compilation.cpp, который компилируется как часть целевого объекта.
Это свойство инициализируется значением переменной CMAKE_AUTOMOC, если она установлена при создании целевого объекта.
Дополнительные параметры командной строки для moc можно задать через свойство AUTOMOC_MOC_OPTIONS.
Включив переменную CMAKE_AUTOMOC_RELAXED_MODE, можно ослабить правила поиска файлов, которые будут обрабатываться moc. Более подробную информацию см. в документации по этой переменной.
Глобальное свойство AUTOGEN_TARGETS_FOLDER можно использовать для группирования целевых объектов automoc вместе в IDE, например, в MSVS.
Файлы исходного кода C++ можно исключить из обработки AUTOMOC, включив SKIP_AUTOMOC или более широкое свойство SKIP_AUTOGEN.
См. руководство cmake-qt(7) для получения дополнительной информации об использовании CMake с Qt.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.8/prop_tgt/AUTOMOC.html