Начало работы с CMake
Начните с find_package для поиска библиотек и заголовочных файлов, поставляемых с Qt. Затем вы можете использовать эти библиотеки и заголовочные файлы с помощью команды target_link_libraries для построения Qt-библиотек и приложений. Эта команда автоматически добавляет соответствующие каталоги включаемых файлов, определения компиляции, флаг независимости от позиции кода и ссылки на библиотеку qtmain.lib на Windows, например.
Построение исполняемого файла GUI
Для построения исполняемого файла GUI helloworld вам потребуется следующее:
cmake_minimum_required(VERSION 3.1.0)
project(helloworld)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(CMAKE_VERSION VERSION_LESS "3.7.0")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(helloworld
mainwindow.ui
mainwindow.cpp
main.cpp
resources.qrc
)
target_link_libraries(helloworld Qt5::Widgets) Для успешного find_package, CMake должен найти установку Qt одним из следующих способов:
- Установите переменную среды
CMAKE_PREFIX_PATHв префикс установки Qt 5. Это рекомендуемый способ. - Установите
Qt5_DIRв кэшеCMakeв расположение файлаQt5Config.cmake.
Настройка CMAKE_AUTOMOC автоматически запускает moc при необходимости. Более подробную информацию см. в документации CMake AUTOMOC.
Импортированные цели
Для каждого модуля Qt создаются импортированные цели. В CMake, команды, такие как target_link_libraries, используют имена импортированных целей вместо переменных, таких как Qt5<Module>_LIBRARIES. Фактический путь к библиотеке можно получить, используя свойство LOCATION, как показано ниже:
find_package(Qt5 COMPONENTS Core REQUIRED) get_target_property(QtCore_location Qt5::Core LOCATION)
Однако, вам редко нужен полный путь к библиотеке, так как большинство CMake API могут находить импортированные цели и использовать их автоматически вместо полного пути. Для этой цели каждый модуль в Qt 5 имеет целевую библиотеку с соглашением об именовании Qt5::<Module>.
Импортированные цели создаются с теми же конфигурациями, что и при настройке Qt. А именно:
- Если Qt был настроен со значением переключателя
-debug, создается импортированная цель с конфигурацией DEBUG. - Если Qt был настроен со значением переключателя
-release, создается импортированная цель с конфигурацией RELEASE. - Если Qt был настроен со значением переключателя
-debug-and-release, что является значением по умолчанию в Windows, то импортированные цели создаются с конфигурациями RELEASE и DEBUG.
Если ваш проект имеет пользовательские конфигурации построения CMake, вам необходимо сопоставить вашу пользовательскую конфигурацию с конфигурацией Qt debug или release.
find_package(Qt5 COMPONENTS Core REQUIRED)
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")
# set up a mapping so that the Release configuration for the Qt imported target is
# used in the COVERAGE CMake configuration.
set_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE") В CMake, плагины также доступны как IMPORTED цели. Модули Qt Network, Qt SQL, Qt GUI и Qt Widgets имеют связанные плагины. Они предоставляют список плагинов в переменной Qt5<Module>_PLUGINS.
foreach(plugin ${Qt5Network_PLUGINS})
get_target_property(_loc ${plugin} LOCATION)
message("Plugin ${plugin} is at location ${_loc}")
endforeach()
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/cmake-get-started.html