Розбираємося із CMakeLists

Ознайомлюємося із тим, як працюють файли CMakeLists.txt

CMake

У нашому вступному підручнику ми використали CMake як систему збирання для нашої програми, але приділили увагу лише одному з файлів CMakeLists.txt. Цей розділ ми присвятимо докладнішому вивченню принципів його роботи.

CMake є корисним, оскільки за його допомогою ми можемо автоматизувати більшу частину роботи, яку слід виконати до компіляції.

CMakeLists.txt

Можливо, ви пам'ятаєте цей файл CMakeLists.txt з першого підручника:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cmake_minimum_required(VERSION 3.16)
project(helloworld)

set(KF_MIN_VERSION "5.68.0")
set(QT_MIN_VERSION "5.12.0")

find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)

set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)

find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Quick Test Gui QuickControls2 Widgets)
find_package(KF5 ${KF_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 I18n CoreAddons)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_subdirectory(src)

feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)

Перший рядок, project(helloworld), визначає назву проєкту.

Після цього ми встановлюємо версії потрібних нам інструментів. cmake_minimum_required(VERSION 3.16) встановлює версію CMake, яку ми викликатимемо. Далі, ми використовуємо set() для визначення змінних (KF5_MIN_VERSION і QT_MIN_VERSION), які містять дані щодо версій KDE Frameworks і Qt.

Далі, маємо розділ, у якому ми включимо декілька потрібних параметрів CMake і KDE за допомогою extra-cmake-modules. Зараз немає сенсу надто перейматися цими рядками — ми не будемо змінювати їх у цьому підручнику.

Наступний розділ є важливим, оскільки у ньому визначають, які залежності ми використовуватимемо під час компіляції. Погляньмо на перший рядок:

find_package(KF5 ${KF5_MIN_VERSION} COMPONENTS Kirigami2 I18n CoreAddons WidgetsAddons)

  • find_package() знаходить і завантажує зовнішній компонент.
  • Першим словом є бібліотека (KF5).
  • Далі, ми викликаємо змінну із версіями, значення яких ми вказали у другому рядку.
  • COMPONENTS — параметр, який передує специфічним компонентам бібліотеки, які ми включатимемо.
  • Кожне слово після COMPONENTS вказує на компонент.

Останній рядок, add_subdirectory(src), вказує каталог src/ для CMake.

1
2
add_executable(helloworld main.cpp resources.qrc)
target_link_libraries(helloworld Qt5::Quick Qt5::Qml Qt5::Gui Qt5::QuickControls2 Qt5::Widgets KF5::Kirigami2 KF5::I18n)

Оскільки більша частина визначається першим файлом, цей файл є набагато коротшим.

  • set() використовується для встановлення для helloworld_SRCS значення main.cpp і resources.qrc (якщо ми вирішимо створити додаткові файли C++, нам слід також додати їх тут)
  • add_executable() відповідає за назву нашого виконуваного файла і визначення файлів, які потрібні для його створення
  • target_link_libraries динамічно пов'язує ціль із бібліотеками, які використовуються у нашому коді для створення виконуваного файла.

Такими налаштуваннями можна скористатися для створення більшості програм на основі Kirigami.