AUTOMOC
Нужно ли обрабатывать целевой объект с automoc (для проектов Qt)?
AUTOMOC — это булево значение, определяющее, будет ли CMake автоматически обрабатывать препроцессор Qt moc, т. е. без необходимости использовать макрос QT4_WRAP_CPP() или QT5_WRAP_CPP(). В настоящее время поддерживаются Qt4 и Qt5.
Когда эта свойство установлено ON, CMake будет сканировать заголовочные и исходные файлы во время сборки и вызывать moc соответственно.
- Если найдено утверждение
#include, например,#include "moc_<basename>.cpp", ожидается, что макрос изAUTOMOC_MACRO_NAMESпоявится в заголовочном файле<basename>.h(xx).mocвыполняется над заголовочным файлом для генерацииmoc_<basename>.cppв каталоге<AUTOGEN_BUILD_DIR>/include, который автоматически добавляется в каталоги включения целевого объектаINCLUDE_DIRECTORIES. Это позволяет компилятору найти включенный файлmoc_<basename>.cppнезависимо от расположения исходного файла.- Для
multi configuration generatorsкаталог включения —<AUTOGEN_BUILD_DIR>/include_<CONFIG>. - См.
AUTOGEN_BUILD_DIR.
- Для
- Если найдено утверждение
#include, например,#include "<basename>.moc", ожидается, что макрос изAUTOMOC_MACRO_NAMESпоявится в исходном файле, иmocвыполняется над самим исходным файлом. - Заголовочные файлы, которые не включаются с помощью утверждения
#include "moc_<basename>.cpp", тем не менее, сканируются на наличие макроса изAUTOMOC_MACRO_NAMES. Полученныеmoc_<basename>.cppфайлы генерируются в пользовательских каталогах и автоматически включаются в сгенерированный файл<AUTOGEN_BUILD_DIR>/mocs_compilation.cpp, который компилируется в качестве части целевого объекта.- Пользовательские каталоги с именами, основанными на контрольной сумме, помогают избежать столкновений имен для
mocфайлов с одинаковым<basename>. - См.
AUTOGEN_BUILD_DIR.
- Пользовательские каталоги с именами, основанными на контрольной сумме, помогают избежать столкновений имен для
- Кроме того, заголовочные файлы с тем же базовым именем, что и исходный файл (например,
<basename>.h) или с_p, добавленным к базовому имени (например,<basename>_p.h), сканируются на наличие макроса изAUTOMOC_MACRO_NAMES, и если он найден,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 вместе в среде разработки, например, в MSVS.
Глобальное свойство AUTOGEN_SOURCE_GROUP можно использовать для группировки файлов, сгенерированных AUTOMOC, вместе в среде разработки, например, в MSVS.
Дополнительные имена макросов для поиска можно добавить в AUTOMOC_MACRO_NAMES.
Дополнительные имена файлов зависимостей moc можно извлечь из исходного кода, используя AUTOMOC_DEPEND_FILTERS.
Препроцессорные определения компилятора для moc записываются в файл moc_predefs.h, который управляется AUTOMOC_COMPILER_PREDEFINES.
Файлы исходного кода C++ можно исключить из обработки AUTOMOC, включив SKIP_AUTOMOC или более широкое свойство SKIP_AUTOGEN.
Количество параллельных процессов moc можно изменить, установив AUTOGEN_PARALLEL.
См. руководство cmake-qt(7) для получения дополнительной информации об использовании CMake с Qt.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.12/prop_tgt/AUTOMOC.html