Spec-Zone.ru › CMake 3.11

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 вместе в IDE, например, в MSVS.

Глобальное свойство AUTOGEN_SOURCE_GROUP можно использовать для группировки файлов, сгенерированных с помощью AUTOMOC, вместе в IDE, например, в 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.11/prop_tgt/AUTOMOC.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API