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