Конфигурация проекта с cmake
CMake — это инструмент, упрощающий процесс сборки проектов. CMake автоматически создаёт системы сборки, например файлы Makefiles.
CMake автоматизирует настройку систем сборки. Он контролирует процесс компиляции программного обеспечения с помощью простых файлов конфигурации, называемых файлами CMakeLists.txt. CMake генерирует собственные конфигурации сборки и рабочие области, которые можно использовать в среде компилятора.
IDE автоматически запускает CMake для обновления информации о проекте, когда разработчик редактирует файл конфигурации CMakeLists.txt. Информация о проекте также автоматически обновляется при сборке проекта.
Команды и макросы CMake
В команде project указывается имя проекта, например, ru.auroraos.cmakeExample.
cmake_minimum_required указывает необходимую минимальную версию CMake.
Одной из основных функций является find_package.
Она позволяет найти библиотеки и файлы заголовков, поставляемые с Qt.
Затем можно использовать эти библиотеки и файлы заголовков с командой target_link_libraries
для создания библиотек и приложений на основе Qt.
pkg_search_module использует инструмент pkg-config для определения местоположения
запрошенной библиотеки.
Модуль инструмента pkg-config в CMake называется FindPkgConfig.
Этот модуль, как и другие, можно подключить с помощью команды include.
add_executable указывает на исполняемые проекта,
add_custom_target — на другие файлы проекта,
qt5_add_translation — на файлы переводов.
file указывает, где исполняемые файлы приложения будут расположены на устройстве.
Команда install позволяет создавать правила установки для проекта.
Правила установки, заданные вызовами команды install() в исходном каталоге, выполняются
по порядку во время установки.
Команды для настройки целей:
target_compile_definitions— указывает параметры компиляции для заданного первого аргумента<target>;target_include_directories— добавляет указанные каталоги в цель;target_link_libraries— указывает библиотеки или флаги для использования при связывании данной цели и/или её зависимостей.
Макросы Qt5::Core:
qt5_add_big_resources— компилирует большие двоичные ресурсы в объектный код;qt5_add_binary_resources— создаёт файл RCC из списка файлов ресурсов Qt;qt5_add_resources— компилирует двоичные ресурсы в исходный код;qt5_generate_moc— вызывает moc для входного файла;qt5_import_plugins— задаёт настраиваемый набор подключаемых модулей для импорта для статической сборки Qt;qt5_wrap_cpp— создаёт файлы .moc из источников.
Переменные CMake
Значения переменных можно устанавливать с помощью команды set.
Примеры переменных:
CMAKE_AUTOMOC— запускает компилятор moc автоматически при необходимости;CMAKE_INCLUDE_CURRENT_DIR— включает автоматическое добавление текущих исходных каталогов и каталогов сборки в путь include.
Примеры установки переменных:
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
ON или OFF включают или выключают функциональность, за которую переменные отвечают.
Модули Qt, загруженные с помощью find_package, также устанавливают различные переменные.
Примеры переменных для модуля Core:
Qt5Core_FOUND— логическое значение, которое описывает, был ли модуль найден успешно;Qt5Core_LIBRARIES— имя импортированной цели для модуля;Qt5Core_INCLUDE_DIRS— список подключаемых каталогов для использования при сборке с библиотекой;Qt5Core_VERSION_STRING— строка, содержащая версию модуля.
Для всех пакетов, найденных с помощью find_package, доступны эквиваленты этих переменных;
они чувствительны к регистру.
Обычно редко нужен прямой доступ к этим переменным. Общие задачи, такие как связывание с модулем, должны выполняться через цели библиотек, которые определяет каждый модуль.
Структура CMake проекта
CMake как систему сборки можно выбрать при создании проекта из шаблона в окне Система сборки.
В результате в директории проекта будет создана следующая файловая структура:
.
├── CMakeLists.txt
├── CMakeLists.txt.user
├── icons
│ ├── 108x108
│ │ └── ru.template.{Имя_проекта}.png
│ ├── 128x128
│ │ └── ru.template.{Имя_проекта}.png
│ ├── 172x172
│ │ └── ru.template.{Имя_проекта}.png
│ └── 86x86
│ └── ru.template.{Имя_проекта}.png
├── qml
│ ├── {Имя_проекта}.qml
│ ├── cover
│ │ └── DefaultCoverPage.qml
│ ├── icons
│ │ └── {Имя_проекта}.svg
│ └── pages
│ ├── AboutPage.qml
│ └── MainPage.qml
├── rpm
│ ├── ru.template.{Имя_проекта}.changes.in
│ ├── ru.template.{Имя_проекта}.changes.run.in
│ └── ru.template.{Имя_проекта}.spec
├── ru.template.{Имя_проекта}.desktop
├── src
│ └── main.cpp
└── translations
├── {Имя_проекта}-ru.ts
└── {Имя_проекта}.ts