Spec-Zone.ru › CMake 3.6

cmake-qt(7)

  • Введение
  • Инструменты сборки Qt
    • AUTOMOC
    • AUTOUIC
    • AUTORCC
  • 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.0.0 FATAL_ERROR)

project(Qt4And5)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Widgets 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 в соответствующее время.

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

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

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

AUTOUIC

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

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

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

Целевой объект может заполнить свойство целевого объекта 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}
)

Проект, использующий ссылку на целевой объект, экспортированный из upstream, автоматически использует соответствующие опции, когда 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
)

AUTORCC

Свойство целевого объекта AUTORCC управляет тем, будет ли cmake(1) создавать правила для выполнения 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.

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.6/manual/cmake-qt.7.html

Spec-Zone.ru

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