Compréhension de « CMakeLists »

Prendre en main le fonctionnement des fichiers « CMakeLists.txt ».

CMake

Dans notre tutoriel d'introduction, nous avons utilisé « CMake » comme système de construction de notre application. Cependant, nous n'avons prêté attention qu'à un seul de nos « CMakeLists ». Ici, nous allons revoir le fonctionnement des « CMakeLists » de manière un peu plus détaillée.

« CMake » est utile car il nous permet d'automatiser la plupart des choses devant être faites avant la compilation.

CMakeLists.txt

Vous vous souvenez peut-être de ce fichier « CMakeLists » du premier tutoriel :

 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)

La première ligne, « projet(helloworld) » définit le nom du projet.

Après cela, nous définissons les versions de nos outils nécessaires. « cmake_minimum_required(VERSION 3.10) » définit la version de « CMake » que nous allons appeler. Nous utilisons ensuite « set » pour définir des variables (« KF5_MIN_VERSION » et « QT_MIN_VERSION ») contenant les versions des environnements de développement de KDE et de Qt.

Ensuite, nous arrivons à une section où nous incluons un certain nombre de paramètres « CMake » et de KDE nécessaires. Vous ne devriez pas trop vous soucier de ces lignes pour l'instant et nous n'aurons pas besoin de les modifier dans ce tutoriel.

La section suivante est importante, car elle spécifie les dépendances que nous allons introduire au moment de la compilation. Regardons la première ligne :

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

  • « find_package » trouve et charge le composant externe.
  • Le premier mot est l'environnement de développement (« KF5 »).
  • Ensuite, nous appelons la variable avec les versions que nous avons définies dans la deuxième ligne.
  • « COMPONENTS » est un paramètre précédant les composants spécifiques de l'environnement de développement que nous allons inclure.
  • Chaque mot après « COMPONENTS » fait référence à un composant spécifique.

La dernière ligne, « add_subdirectory(src) », fait pointer « CMake » vers le dossier « src ».

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)

Comme le gros du travail est fait dans le premier fichier, celui-ci est beaucoup plus court.

  • La propriété « set » est utilisée pour définir « helloworld_SRCS » à « main.cpp » et « resources.qrc » (si nous décidons de créer des fichiers C++ supplémentaires, nous devrons les ajouter ici aussi).
  • « add_executable » se charge de nommer notre exécutable et de collecter les fichiers nécessaires à sa création.
  • « target_link_libraries » effectue une liaison dynamique entre les bibliothèques utilisées dans notre code et notre exécutable.

Cette configuration sera utile lors du développement de la plupart des applications avec Kirigami.