Spec-Zone.ru › CMake 3.5

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 — на странице Qt cmake manual для вашей версии 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.5/manual/cmake-qt.7.html

Spec-Zone.ru

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