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.
См. руководство cmake-qt(7) для получения дополнительной информации об использовании CMake с Qt.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.10/prop_tgt/AUTOMOC.html