Документация
ОС Аврора 4.0.1

Конфигурация проекта с 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

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.