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.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.
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>/mocs_compilation_$<CONFIG>.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 ищется в следующих местах:
<source_dir>/<basename>.ui<source_dir>/<path><basename>.ui<AUTOUIC_SEARCH_PATHS>/<basename>.ui<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.
Целевой объект может заполнить свойство целевого объекта INTERFACE_AUTOUIC_OPTIONS параметрами, которые должны использоваться при вызове uic. Это должно соответствовать содержимому свойства целевого объекта AUTOUIC_OPTIONS целевого объекта-зависимости. Переменная CMAKE_DEBUG_TARGET_PROPERTIES может использоваться для отслеживания исходного целевого объекта такого INTERFACE_AUTOUIC_OPTIONS. Это означает, что библиотека, предоставляющая альтернативную систему перевода для Qt, может указать параметры, которые должны использоваться при запуске uic:
Потребляющий проект, который подключается к целевому объекту, экспортированному из источника, автоматически использует соответствующие параметры при запуске uic командой AUTOUIC, в результате подключения к целевому объекту IMPORTED:
Исходные файлы могут быть исключены из обработки AUTOUIC путём включения SKIP_AUTOUIC или более широкого SKIP_AUTOGEN.
AUTORCC
Свойство целевого объекта AUTORCC управляет тем, создаёт ли cmake(1) правила для выполнения rcc в соответствующее время для исходных файлов, у которых расширение .qrc.
Свойство целевого объекта AUTORCC может быть предварительно установлено для всех последующих целевых объектов путём установки переменной CMAKE_AUTORCC. Свойство целевого объекта AUTORCC_OPTIONS может быть заполнено для установки параметров, передаваемых rcc. Переменная CMAKE_AUTORCC_OPTIONS может быть заполнена для предварительной установки параметров для всех последующих целевых объектов. Свойство файла исходного кода AUTORCC_OPTIONS может быть установлено для файла <name>.qrc для установки определённых параметров для файла. Это переопределяет параметры из свойства целевого объекта AUTORCC_OPTIONS.
Исходные файлы могут быть исключены из обработки AUTORCC путём включения SKIP_AUTORCC или более широкого SKIP_AUTOGEN.
Целевой объект <ORIGIN>_autogen
Инструменты moc и uic выполняются как часть синтезированного целевого объекта <ORIGIN>_autogen custom target, сгенерированного CMake. По умолчанию целевой объект <ORIGIN>_autogen наследует зависимости целевого объекта <ORIGIN> (см. AUTOGEN_ORIGIN_DEPENDS). Зависимости целевого объекта могут быть добавлены в целевой объект <ORIGIN>_autogen путём добавления их в свойство целевого объекта AUTOGEN_TARGET_DEPENDS.
Генераторы Visual Studio
При использовании генераторов Visual Studio generators, CMake генерирует PRE_BUILD custom command вместо <ORIGIN>_autogen custom target (для AUTOMOC и AUTOUIC). Однако, это не всегда возможно, и используется <ORIGIN>_autogen custom target, когда
- целевой объект
<ORIGIN>зависит от файловGENERATED, которые не исключены из обработкиAUTOMOCиAUTOUICс помощьюSKIP_AUTOMOC,SKIP_AUTOUIC,SKIP_AUTOGENилиCMP0071 -
AUTOGEN_TARGET_DEPENDSперечисляет файл исходного кода -
CMAKE_GLOBAL_AUTOGEN_TARGETвключено
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.
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/manual/cmake-qt.7.html