Hello !

Je m'essaie à la gestion de dépendances, et ce n'est pas glorieux.

J'ai un projet lib_A qui nécessite deux librairies header-only lib_B (que je maintiens) et sqlite3pp trouvables sur github, et puis aussi Boost, GDAL et Sqlite3. J'essaie de faire des CMakeLists pour lib_A et lib_B qui gèrent à peu près ça correctement. Mais je ne sais pas ce qu'une solution "correcte" est censée faire :/ Est-ce posssible de faire en sorte que l'utilisateur aie seulement à écrire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
git clone lib_A
cd lib_A
mkdir build
cmake ..
make install
make test
... et que ça se charge tout seul de trouver les dépendances, identifie les bonnes versions, les installe si besoin (si oui où?), lance les tests etc ? Je n'ai d'ailleurs toujours pas compris si les tests étaient censés faire partie de l'installation. Et je n'ai pas compris ce qu'installer une librairie headeronly signifiait concrètement (la rendre findpackage compatible? La déplacer à une localisation standard ?).

Pour l'instant je bricole et c'est pas très beau à voir.

Pour pouvoir utiliser find_package(lib_B), j'ai suivi ce tuto https://dominikberner.ch/cmake-interface-lib/. Mais quand j'écris cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/your/installation/path, je suis censé choisir quoi ? /usr/local ? Et les includes de lib_B sont censés arriver où ? dans usr/local/include/lib_B ? Et pourquoi ça a créé un usr/local/share/LIB_B ?

A ce point, si lib_B est installée, je peux la trouver dans le CMakeLists de lib_A. Mais si elle n'est pas installée, je ne sais pas comment procéder. J'ai l'impression que la solution devrait ressembler à ce que j'essaie de faire pour gérer la dépendance à sqlit3pp: j'ai essayé de suivre ce tutoriel https://foonathan.net/2016/07/cmake-...ency-handling/ qui utilise les git submodules mais pour l'instant ça marche pas lol. Et en même temps d'autres décrient l'utilisation des submodules.

Que me conseillez-vous ? Le copy-pasting ça pourrait marcher pour sqlite3pp qui est toute petite, mais pas pour lib_B qui est pas vraiment stable.

Si vous aviez aussi un textbook sur le cmake modern ou les build systems ou la gestion de dépendances à me conseiller ... j'ai l'impression de découvrir un tout autre aspect de la programmation, et pour l'instant je trouve ça très flou, je n'en suis même pas au point où j'arrive à formuler mes questions clairement

En vous passant le bonjour des contrées glaciales du Michigan ...