Spec-Zone.ru › CMake 3.11

cmake-qt(7)

  • Введение
  • Инструменты построения Qt
    • AUTOMOC
    • AUTOUIC
    • AUTORCC
  • Генераторы Visual Studio
  • qtmain.lib в Windows

Введение

CMake может находить и использовать библиотеки Qt 4 и Qt 5. Библиотеки Qt 4 находятся с помощью модуля поиска FindQt4, поставляемого с CMake, тогда как библиотеки Qt 5 находятся с помощью «Пакеты файлов конфигурации», поставляемых с Qt 5. См. cmake-packages(7) для получения дополнительной информации о пакетах CMake, а также руководство Qt cmake для вашей версии Qt.

Qt 4 и Qt 5 могут использоваться вместе в одном CMake buildsystem:

cmake_minimum_required(VERSION 3.8.0 FATAL_ERROR)

project(Qt4And5)

set(CMAKE_AUTOMOC ON)

find_package(Qt5 COMPONENTS Widgets DBus REQUIRED)
add_executable(publisher publisher.cpp)
target_link_libraries(publisher Qt5::Widgets Qt5::DBus)

find_package(Qt4 REQUIRED)
add_executable(subscriber subscriber.cpp)
target_link_libraries(subscriber Qt4::QtGui Qt4::QtDBus)

Цель CMake не может быть связана одновременно с Qt 4 и Qt 5. Если это происходит или следует из транзитивного оценивания зависимостей целей, выдается диагностическое сообщение.

Инструменты построения Qt

Qt полагается на некоторые объединенные инструменты для генерации кода, такие как moc для генерации метаобъектного кода, uic для макета и заполнения виджетов, и rcc для генерации контента виртуальной файловой системы. Эти инструменты могут быть автоматически вызваны cmake(1), если выполнены соответствующие условия. Автоматическое вызов инструментов может быть использован с Qt 4 и Qt 5.

Инструменты выполняются как часть сгенерированной CMake пользовательской цели. Зависимости целей могут быть добавлены к этой пользовательской цели, добавив их в свойство цели AUTOGEN_TARGET_DEPENDS.

AUTOMOC

Свойство цели AUTOMOC управляет тем, проверяет ли cmake(1) файлы C++ в цели, чтобы определить, требуется ли запуск moc, и создать правила для выполнения moc в нужное время.

Если макрос из AUTOMOC_MACRO_NAMES найден в файле заголовка, moc будет запущен для файла. Результат будет помещён в файл, имя которого определено по moc_<basename>.cpp. Если макрос найден в файле реализации C++, выходные данные moc будут помещены в файл, имя которого определяется по <basename>.moc, следуя соглашениям Qt. <basename>.moc должен быть включён пользователем в файл реализации C++ с директивой препроцессора #include.

Включенные moc_*.cpp и *.moc файлы будут сгенерированы в каталоге <AUTOGEN_BUILD_DIR>/include, который автоматически добавляется в каталоги включения цели INCLUDE_DIRECTORIES.

  • Это отличается от CMake 3.7 и ниже; см. их документацию для получения подробностей.
  • Для multi configuration generators каталог включения – <AUTOGEN_BUILD_DIR>/include_<CONFIG>.
  • См. AUTOGEN_BUILD_DIR.

Файлы moc_<basename>.cpp, не включенные в проект, будут сгенерированы в пользовательских папках для предотвращения конфликтов имён и включены в отдельный файл <AUTOGEN_BUILD_DIR>/mocs_compilation.cpp, который компилируется в цель.

  • См. AUTOGEN_BUILD_DIR.

Командная строка moc будет использовать свойства цели COMPILE_DEFINITIONS и INCLUDE_DIRECTORIES из цели, для которой она вызывается, и для соответствующей конфигурации сборки.

Свойство цели AUTOMOC может быть предварительно установлено для всех последующих целей путём установки переменной CMAKE_AUTOMOC. Свойство цели AUTOMOC_MOC_OPTIONS может быть заполнено для установки параметров, передаваемых moc. Переменная CMAKE_AUTOMOC_MOC_OPTIONS может быть заполнена для предварительной установки параметров для всех последующих целей.

Дополнительные имена макросов для поиска можно добавить в AUTOMOC_MACRO_NAMES.

Дополнительные имена файлов зависимостей moc могут быть извлечены из исходного кода с помощью AUTOMOC_DEPEND_FILTERS.

Исходные файлы C++ могут быть исключены из обработки AUTOMOC путём включения SKIP_AUTOMOC или более широкой SKIP_AUTOGEN.

AUTOUIC

Свойство цели AUTOUIC управляет тем, проверяет ли cmake(1) файлы C++ в цели, чтобы определить, требуется ли запуск uic, и создать правила для выполнения uic в нужное время.

Если директива препроцессора #include соответствует <path>ui_<basename>.h, и файл <basename>.ui существует, то uic будет выполнен для генерации соответствующего файла. Файл <basename>.ui ищется в следующих местах:

  1. <source_dir>/<basename>.ui
  2. <source_dir>/<path><basename>.ui
  3. <AUTOUIC_SEARCH_PATHS>/<basename>.ui
  4. <AUTOUIC_SEARCH_PATHS>/<path><basename>.ui

где <source_dir> – это каталог файла C++ и AUTOUIC_SEARCH_PATHS – это список дополнительных путей поиска.

Сгенерированные файлы ui_*.h помещаются в каталог <AUTOGEN_BUILD_DIR>/include, который автоматически добавляется в каталоги включения цели INCLUDE_DIRECTORIES.

  • Это отличается от CMake 3.7 и ниже; см. их документацию для получения подробностей.
  • Для multi configuration generators каталог включения – <AUTOGEN_BUILD_DIR>/include_<CONFIG>.
  • См. AUTOGEN_BUILD_DIR.

Свойство цели AUTOUIC может быть предварительно установлено для всех последующих целей путём установки переменной CMAKE_AUTOUIC. Свойство цели AUTOUIC_OPTIONS может быть заполнено для установки параметров, передаваемых uic. Переменная CMAKE_AUTOUIC_OPTIONS может быть заполнена для предварительной установки параметров для всех последующих целей. Свойство файла исходного кода AUTOUIC_OPTIONS может быть установлено для файла <basename>.ui для установки определённых параметров для файла. Это переопределяет параметры из свойства цели AUTOUIC_OPTIONS.

END_OF_DOCUMENT_MARKER

Цель может заполнить свойство цели INTERFACE_AUTOUIC_OPTIONS параметрами, которые должны использоваться при вызове uic. Это должно соответствовать содержимому свойства цели AUTOUIC_OPTIONS целевой зависимости. Переменная CMAKE_DEBUG_TARGET_PROPERTIES может использоваться для отслеживания целевого объекта происхождения такой INTERFACE_AUTOUIC_OPTIONS. Это означает, что библиотека, предоставляющая альтернативную систему перевода для Qt, может указать параметры, которые должны использоваться при запуске uic:

add_library(KI18n klocalizedstring.cpp)
target_link_libraries(KI18n Qt5::Core)

# KI18n uses the tr2i18n() function instead of tr().  That function is
# declared in the klocalizedstring.h header.
set(autouic_options
  -tr tr2i18n
  -include klocalizedstring.h
)

set_property(TARGET KI18n APPEND PROPERTY
  INTERFACE_AUTOUIC_OPTIONS ${autouic_options}
)

Проект, использующий цель, экспортированную из исходного проекта, автоматически использует соответствующие параметры при запуске uic командой AUTOUIC в результате связывания с целью IMPORTED:

set(CMAKE_AUTOUIC ON)
# Uses a libwidget.ui file:
add_library(LibWidget libwidget.cpp)
target_link_libraries(LibWidget
  KF5::KI18n
  Qt5::Widgets
)

Исходные файлы могут быть исключены из обработки AUTOUIC путём включения SKIP_AUTOUIC или более широкого параметра SKIP_AUTOGEN.

AUTORCC

Свойство цели AUTORCC управляет созданием CMake правил для выполнения rcc в нужное время над исходными файлами с расширением .qrc.

add_executable(myexe main.cpp resource_file.qrc)

Свойство цели AUTORCC может быть предварительно установлено для всех последующих целей путём установки переменной CMAKE_AUTORCC. Свойство цели AUTORCC_OPTIONS может быть заполнено для установки параметров, которые нужно передать rcc. Переменная CMAKE_AUTORCC_OPTIONS может быть заполнена для предварительной установки параметров для всех последующих целей. Свойство исходного файла AUTORCC_OPTIONS может быть установлено для файла <name>.qrc для настройки конкретных параметров для файла. Это переопределяет параметры из свойства цели AUTORCC_OPTIONS.

Исходные файлы могут быть исключены из обработки AUTORCC путём включения SKIP_AUTORCC или более широкого параметра SKIP_AUTOGEN.

Генераторы Visual Studio

При использовании Visual Studio generators, CMake использует PRE_BUILD custom command для AUTOMOC и AUTOUIC. Если обработка AUTOMOC и AUTOUIC зависит от файлов, используется custom target. Это происходит, когда

  • Целевой объект-источник зависит от файлов GENERATED, которые не исключены из AUTOMOC и AUTOUIC параметрами SKIP_AUTOMOC, SKIP_AUTOUIC, SKIP_AUTOGEN или CMP0071
  • AUTOGEN_TARGET_DEPENDS перечисляет исходный файл

qtmain.lib в Windows

Цели Qt 4 и 5 IMPORTED для библиотек QtGui указывают, что статическая библиотека qtmain.lib, поставляемая с Qt, будет связана со всеми зависимыми исполняемыми файлами, у которых включено свойство WIN32_EXECUTABLE.

Чтобы отключить это поведение, включите свойство цели Qt5_NO_LINK_QTMAIN для целей Qt 5 или свойство цели QT4_NO_LINK_QTMAIN для целей Qt 4.

add_executable(myexe WIN32 main.cpp)
target_link_libraries(myexe Qt4::QtGui)

add_executable(myexe_no_qtmain WIN32 main_no_qtmain.cpp)
set_property(TARGET main_no_qtmain PROPERTY QT4_NO_LINK_QTMAIN ON)
target_link_libraries(main_no_qtmain Qt4::QtGui)

© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.11/manual/cmake-qt.7.html

Spec-Zone.ru

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