Voici ce que j’ai écris à mon équipe:
CMake:Si un jour vous souhaitez vous mettre au C++. Surtout ne le faite jamais depuis Windows. Il y a 10ans la gestion des dépendances était déjà un calvaire mais maintenant c’est pire, c’est un foutoir sans non où rien ne fonctionne. C’est juste affligeant comme c’est devenu une torture sans nom.
Par contre sur Linux c’est bien sympa :visage_légèrement_souriant:
J’ai cherché pour gérer des dépendances depuis CMake.
Il y a vcpkg et chocolatey pour les librairies standards.
Chocolatey fonctionne bien CMake le trouve automatiquement.
VCPKG même en ajoutant CMAKE_TOOLCHAIN_FILE "C:/lib/vcpkg/scripts/buildsystems/vcpkg.cmake" au projet CMake, cmake ne trouve rien.
Puis même si je veille bien, à ce que les dépendances soient installées dans le répertoire x64: C:/lib/vcpkg/vcpkg.exe install curl --triplet x64-windows, ça ne suffit pas.
Pour curl je dois spécifier ainsi les chemins:
Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 set(CURL_INCLUDE_DIR "${VCPKG_DIR}/installed/x64-windows/include/curl") set(CURL_LIBRARY_DEBUG "${VCPKG_DIR}/installed/x64-windows/lib/libcurl.lib") set(CURL_LIBRARY_RELEASE "${VCPKG_DIR}/installed/x64-windows/lib/libcurl.lib")
Ensuite il y les librairies non standards (ou celles que nous souhaitons compiler avec d’autres options):
Alors là j’utilise FetchContent.
Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 include(FetchContent) FetchContent_Declare(ftpclient GIT_REPOSITORY https://github.com/embeddedmz/ftpclient-cpp.git GIT_TAG v2.0.0 ) FetchContent_MakeAvailable(ftpclient)
mais rien à faire là aussi ça ne fait que télécharger et compiler la librairie mais les chemins il ne les trouve pas.
L’exemple de CMake utilise Google test
https://cmake.org/cmake/help/latest/...chContent.html
Et là comme prévu ça ne fonctionne pas non plus.
Puis des fois il y a le cas des en-têtes des dépendances téléchargées par FetchContent. Visual les voit via le clic droit sur #include <toto.h> mais à la compilation il ne voit rien. Comment ça se fait que CMake informe bien l’IDE et pas le compilateur?
A noter que je trouve la documentation de CMake nul. Elle est pauvre. Il n’y a pas de ligne directrice pour écrire nos projets de la bonne manière. Il y a très peut d’exemples.
Meson:
Lui aussi il a ses particularités: Ex il faut l’utiliser via une console posix car cmd ne gère pas l’utf8.
Il ne génère pas de solution visual/CB/CodeLIte… .
Et puis pour la librairie que je souhaite compiler ça ne fonctionne pas.
https://github.com/Snaipe/Criterion/discussions/449
Puis il y a d’autres systèmes de compilation: wxBuild pour wxidgets, Jam pour Boost… Chacun avec sa documentation et ses problèmes.
Si nous ne passons pas du temps à scripter /automatiser la mise à jour des dépendances, alors mettre à jour les dépendances de gros projets peut prendre facilement un mois.
Sur deux gros projets que j’ai eu à travailler, le prix à payer pour mise à jour des dépendances étaient d’un mois.
Alors maintenant je suis dans une petite boîte. Nous ne pouvons pas nous permettre d’attendre un mois. Nous ne pouvons prendre le temps d’écrire des scripts pour mettre à jour correctement les dépendances, cela prendrait plus d’un mois à écrire.
Du coup bein nous utilisons python. Et pour les traitements avec un gros besoin de perfs bein python… et un gros PC… caché dans un coin.
Cette fois j’ai décidé de prendre le taureau par les cornes et j’ai créer des projets c++…sous windows. J’en ai chier et je continu à réellement souffrir pour inclure des librairies. Surtout ça doit aussi fonctionner sur linux, donc au-revoir NuGET.
Alors que quand je bosse sur mes projets perso en c++, j’éprouve un vrais plaisir car c’est sur Linux. Même sur Mac la gestion des dépendances est meilleur. Je ne veux pas dire que c’est facile mais au moins je ne deviens pas fou.
Il faut aussi ajouter le faite que les développeurs en général (moi le premier) ne documentent pas asse la phase d’installation. Et quand ils le font il y a toujours pleins de cas merdiques à gérer.
Enfin bon, pour moi la meilleur manière de compiler une librairie sur plusieurs plateformes, c’est de scripter tout via python ou de ne dépendre que de la librairie standard.
Du coup j’espère que les étudiants, les thésards, les gourous qui normes le c++ penserons à nous les programmeurs: Et que pour une fois, il y ai une vrais gestion des dépendances dans les prochaines normes. Car c’est vraiment ridicule et pas professionnels d’avoir une telle gestion catastrophiques des dépendances.
Faire du C++ sur Windows… c’est une torture.
Partager