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