plywood, bien que basé sur CMake, vient avec ses propres outils de gestion d'environnement. Comment le faire fonctionner avec Clion ?

J'aime bien l'environnement de programmation de JetBrains Clion. Depuis sa création, j'ai toujours apprécié que les développeurs dirigent leurs développement vers les usages de leurs clients.

De son côté, plywood est un environnement qui offre un cadre au développement de logiciel, plutôt jeu vidéo mais sans l'imposer. Comme plywood utilise CMake de façon poussée derrière une commande particulière, Clion est un peu perdu. En effet, Clion s'attend de son côté à une utilisation classique de CMake et à la possibilité de pouvoir reloger les artefacts de build.

Il est un peu laborieux, mais pas si complexe, de joindre les deux mondes. Voici une méthode qui fonctionne à l'heure où j'écris cet article, qui est à prendre plus comme des « notes pour moi-même ».

Construire plywood

La première étape est de construire plywood tel qu'indiquer dans sa documentation. Lorsque la commande plywood est disponible, vous pouvez créer votre projet.

Initialiser son projet

Initialiser un projet consiste à créer un dossier de construction (build folder), y associer des cibles (targets) qui référencent des modules présents dans des dépôts (repos).

Avec de créer un dossier first_test, on écrit : ./plytool folder create first_test. Pour le sélectionner s'il existe déjà ./plytool folder set first_test.

On peut y ajouter ensuite des cibles avec ./plytool target add first_test (ici, first_test est le nom d'un module disponible).

À partir du moment où la commande ./plytool run --auto first_test lance le projet avec succès, il est possible de lancer Clion... ou presque.

Compilation Database

Clion peut comprendre un projet plywood de deux manières. Soit en lisant un Makefile généré (par ./plywood generate), soit à partir d'une compilation database, un fichier json donnant des indications sur les fichiers traités lors d'une compilation.

Quoique l'on fasse, il faut débuter la configuration dans le répertoire de compilation. Pour le dossier de construction first_test en debug, ce répertoire est data/build/first_test/build/Debug. Ouvrir le Makefile disponible dans ce repertoire depuis Clion fonctionne. Clion détecte bien les cibles possibles... mais il semble mal comprendre la structure du fichier au niveau des dépendances vers les bibliothèques.

Il est possible d'utiliser Tools -> Makefile -> Change project root pour placer au niveau de plywood, mais comme Clion n'a pas pu analyser le Makefile, les fichiers sources ne sont pas reconnus comme faisant partie du projet. Et d'ailleurs, il ne sont par défaut pas dans explorateur de projet.

Retour au terminal à côté du Makefile pour générer une base de donnée de compilation. J'utilise Compilation Database Generator pour cela, qui s'installe facilement via pip (pip3 install compiledb).

La commande compiledb make -j 4 (-j 4 est bien entendu optionnel) va lancer la compilation et récupérer les informations de construction.

Une fois terminé avec succès, retour sur Clion. Il faut ouvrir le fichier généré compile_commands.json en tant que projet. Il se trouve que Clion garde les informations de cible analysées depuis le Makefile, mais passe en mode compilation database. Afin de retrouver la hiérarchie du projet, Tools -> Compilation Database -> Change Project Root et pointer vers la racine de plywood.

Et voilà, Clion reconnait la structure de projet, connais la cible make all et le debuggeur fonctionne.

Un peu acrobatique... mais ça marche !