Розбираємося із CMakeLists
CMake
У нашому вступному підручнику ми використали CMake як систему збирання для нашої програми, але приділили увагу лише одному з файлів CMakeLists.txt
. Цей розділ ми присвятимо докладнішому вивченню принципів його роботи.
CMake є корисним, оскільки за його допомогою ми можемо автоматизувати більшу частину роботи, яку слід виконати до компіляції.
CMakeLists.txt
Можливо, ви пам'ятаєте цей файл CMakeLists.txt
з першого підручника:
|
|
Перший рядок, cmake_minimum_required(VERSION 3.16)
, встановлює версію CMake, яку буде викликано.
Після цього project(helloworld)
визначає назву проєкту.
Далі, маємо розділ, у якому ми включимо декілька потрібних параметрів CMake і KDE за допомогою extra-cmake-modules. Зараз немає сенсу надто перейматися цими рядками — ми не будемо змінювати їх у цьому підручнику.
Наступний розділ є важливим, оскільки у ньому визначають, які залежності ми використовуватимемо під час компіляції. Погляньмо на початок:
|
|
- find_package() знаходить і завантажує зовнішній компонент.
- Першим словом є бібліотека, Qt.
${QT_MAJOR_VERSION}
є зручною змінною, доступ до якої надає extra-cmake-modules. За її допомогою ми можемо вибрати використану версію Qt, 5 або 6, залежно від того, чи використовуємо ми прапорець CMake-DBUILD_WITH_QT6=ON
. REQUIRED
повідомляє CMake, що ці залежності є справді обов'язковими і що програма має повідомити про помилку і завершити роботу, якщо пакунок не буде знайдено.NO_MODULE
перемикає CMake у режим Config. Зараз перейматися цим немає сенсу.COMPONENTS
— параметр, який передує специфічним компонентам бібліотеки, які ми включатимемо.- Кожне слово після
COMPONENTS
вказує на компонент.
Нотатка
Якщо ви хочете додати будь-які компоненти зі списку у документації до програмного інтерфейсу KDE до вашої програми, ви можете звернутися до коду правої бічної панелі, щоб ознайомитися зі способом додавання компонента за допомогою CMake. Наприклад, для
Kirigami2
ви побачите щось подібне до find_package(KF5Kirigami2)
, що з додаванням extra-cmake-modules стає чимось подібним до find_package(KF5 COMPONENTS Kirigami2)
.
Значну увагу слід звернути на включення компонентів, оскільки пропускання компонентів, які використано у вашому коді, призведе до неможливості зібрати вашу програму.
Останній рядок дозволяє CMake вивести список пакунків, які було знайдено. А вище, add_subdirectory(src)
вказує CMake каталог src/
, де програма знайде інший файл CMakeLists.txt
:
|
|
Оскільки більша частина визначається першим файлом, цей файл є набагато коротшим.
- add_executable() відповідає за створення нашого виконуваного файла.
- target_sources() надає нам змогу додавати файли, які буде використано у нашому новому виконуваному файлі.
- target_link_libraries() динамічно пов'язує ціль із бібліотеками, які використовуються у нашому коді для створення виконуваного файла. Kirigami не включено сюди, оскільки ми використовуємо лише її модуль QML.
- install() розташовує наш виконуваний файл у належному місці за допомогою
${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
, зручної змінної, яку надає KDEInstallDirs у extra-cmake-modules, і яка встановлює виконувані файли та бібліотеки у належному місці, без потреби у визначенні абсолютних шляхів, подібно до GNUInstallDirs.
Нотатка
Зауважте, що ці бібліотеки мають відповідати компонентам, які ми включили до нашого попереднього файлаCMakeLists.txt
— інакше ці компоненти не буде включено і нашу програму не можна буде зібрати.Такими налаштуваннями можна скористатися для створення більшості програм на основі Kirigami.