Spec-Zone.ru › CMake 3.8

cmake-qt(7)

  • Введение
  • Инструменты сборки Qt
    • AUTOMOC
    • AUTOUIC
    • AUTORCC
  • qtmain.lib в Windows

Введение

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

Если в заголовочном файле обнаруживается макрос 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_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include, который автоматически добавляется в INCLUDE_DIRECTORIES целевого объекта. (Это отличается от CMake 3.7 и ниже; см. документацию для подробностей.)

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

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

AUTOUIC

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

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

Сгенерированные файлы ui_*.h размещаются в каталоге <CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include, который автоматически добавляется в INCLUDE_DIRECTORIES целевого объекта. (Это отличается от CMake 3.7 и ниже; см. документацию для подробностей.)

Свойство цели 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
)

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

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.

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

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

Spec-Zone.ru

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