IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

La gestion des dépendances C++ sur Windows est une véritable torture.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut La gestion des dépendances C++ sur Windows est une véritable torture.
    Voici ce que j’ai écris à mon équipe:
    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:
    CMake:
    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.

  2. #2
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 397
    Par défaut
    Suffit d'utiliser Qt !

    Pour les autres libs, dans mes projets pro, la version est figée. Donc le téléchargement des binaires ou le build a partir des sources n'est pas dans le build des projets. Les libs sont juste dans un dossier 3rdparty, le chemin est donc fixe et il n'y a aucun problème de config du build des projets.

    Les binaires sont en général téléchargé à la main (ce qui n'arrivent pas souvent, donc cela ne nécessite pas un gros travail) ou compilé via des scripts automatiques (donc qui nécessite de faire le boulot que la première fois).

  3. #3
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Citation Envoyé par Suryavarman Voir le message
    Voici ce que j’ai écris à mon équipe:

    Faire du C++ sur Windows… c’est une torture.
    Dieu merci je ne suis pas dans "ton" équipe...
    Bon tout d'abord, ce dont tu parles c'est un problème de CMake et autres outils, de C++ mais certainement pas de Windows.
    De plus, Criterion n'a pas été tester avec Cygwin comme indiqué dans ton bug report donc arrête de pleurer parce que ça marche pas. Je ne vois nul part de la documentation sur comment utiliser Criterion sous Windows donc la encore c'est un problème de Critérion, pas de Windows.
    Il en existe plein qui fonctionne très bien , sous Windows, Linux et Mac ( BoostTest, GoogleTest, catch2 ).

    Le problème ici pour ce que je lis il est entre la chaine de le clavier. Remets toi en question, c'est pas parce que tu développes avec des outils sous Linux que ça doit fonctionner sous Windows. C'est tout un métier tu sais....

    C++ à un problème de gestion de dépendances c'est claire, mais c'est pas la faute a Windows. Linux a apporté des solutions, et Windows les siennes, maintenant tu fais avec ou tu changes de métier.

    Comment font les entreprises qui gères ça bien? Car oui il y en a et sans CMake..
    Juste des exemples :
    - Unreal Engine (outils custom)
    - Unity (Gradle)
    - Ogre3D ( CMake )
    - BulletPhysics (premake)
    - Blizzard ( premake )
    - ...
    Autres qui utilise CMake avec succès sur plusieurs platformes donc Windows:

    • Allegro library
    • Armadillo
    • Avidemux
    • awesome
    • BCI2000
    • Blender
    • BRL-CAD
    • Bullet Physics Engine
    • CGAL
    • Chipmunk physics engine
    • CLion
    • Compiz
    • Conky
    • cURL
    • Deal.II
    • Doomsday Engine
    • Dust Racing 2D
    • Drishti
    • Ettercap
    • Falcon (programming language)
    • FlightGear Flight Simulator
    • GDCM
    • Geant4
    • Gmsh
    • GNU Radio
    • GROMACS
    • La suite ici


    Maintenant c'est quoi ta question? Tu attends de nous que l'on se plaigne de ton sort?

  4. #4
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    @ Astraya

    Sans commentaire…

    Au mieux j’attendais des solutions, des propositions…mais pas ça…

    Enfin bon.

    Et oui les projets que tu site passe du temps à gérer leur dépendances. Enfin en 2022 les autres langages ont des trucs pour inclure ça en quelques clics. C++ sur Windows c’est pas encore ça. Si je te donne 4h pour écrire un projet C++ / CMake, inclure une lib genre facile GTest et qui se télécharge et compile automatiquement, y-arriveras-tu ?
    Python si tu sais faire, ça te prendra 10min.


    Note: Pour Criterion c’est pas Cygwin que j’utilise… il faut lire un peu plus (ou que j’apprenne à mieux écrire en Anglais, ou écrire tout cour).

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 184
    Par défaut
    Je ne suis pas développeur, mais la 1ère question que je me pose : est-ce vraiment un problème Cmake ?
    Il se peut que ce soit un problème d'utilisation de celui-ci, ou lié à une dépendance précise.

    Si tu ne fais pas de crossplatform, il serait peut-être mieux d'utiliser les outils natifs Microsoft. Ca contrournerai peut-être ton prob.

    Malheureusement, je pense pas que ce que je dis te fasse avancer.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Astraya tu me répond pour le plaisir d’étaler ton mépris ou pour être constructif?
    Je t'ai fait quoi ?
    Ils sont où tes conseils, tes suggestions, tes liens?

    Ton argumentaire est là pour me dire que je suis une merde de développeur.

    J'ai décris ma réalité. Je ne comprend même pas pourquoi un admin n'est pas venu te demander de te calmer.


    T'en pis. T'es peut être un bon dev mais je n'ai pas besoin de ton mépris.

    Je note: La communauté du c++ est pourri par des bons devs qui méprisent les moins bons. Un élitisme qui j'espère terminera dans la tombe avec ma génération.

    Dommage car moi aussi j'adore le c++, c'est mon langage favoris et de loin. Moi aussi j'en fais depuis plus 15ans.

    Citation Envoyé par chrtophe Voir le message
    Je ne suis pas développeur, mais la 1ère question que je me pose : est-ce vraiment un problème Cmake ?
    Il se peut que ce soit un problème d'utilisation de celui-ci, ou lié à une dépendance précise.

    Si tu ne fais pas de crossplatform, il serait peut-être mieux d'utiliser les outils natifs Microsoft. Ca contrournerai peut-être ton prob.

    Malheureusement, je pense pas que ce que je dis te fasse avancer.
    Oui pour les cas où je dois faire des applications uniquement sur Windows.Mais c'est plutôt l’exception.
    D'ailleurs ce que je dis pour C++ sur Windows est aussi presque valable sur linux et mac. C'est pas facile non plus, mais moins que sur Windows.

    Il y a cinq-six ans j'avais commencer un projet windows pour compiler des librairies et des projets c++ écrit en python. Je n'en n'ai pas parlé car mon niveau d'anglais est bien médiocre.
    Somme toute je l'ai abandonné, mais il commençait à ressembler à quelques chose.
    J'avais plus ou moins réussi à automatiser la compilation pour les projets suivant:
    https://sourceforge.net/p/gdeps/merc...tree/Projects/
    J''avais géré les compilateurs de l'époque. Mingw, Clang et les VC, pour le 32 et le 64 bits. (pas d'Intel et pas de Borland)

    J'avais fait ce projet pour répondre à cette problématique.

  7. #7
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Citation Envoyé par Suryavarman Voir le message
    @ Astraya

    Sans commentaire…

    Au mieux j’attendais des solutions, des propositions…mais pas ça…
    Dans ce cas il faut poser la question. Sous Windows, les dépendances sont téléchargées, unpackées et installées par des scripts, ou clonées avec git via un script ou les git submodule ou git subtree. C'est ce que font TOUT les logiciels comme CMake, Gradle, etc... Rien de magique.

    Citation Envoyé par Suryavarman Voir le message
    Et oui les projets que tu site passe du temps à gérer leur dépendances. Enfin en 2022 les autres langages ont des trucs pour inclure ça en quelques clics. C++ sur Windows c’est pas encore ça. Si je te donne 4h pour écrire un projet C++ / CMake, inclure une lib genre facile GTest et qui se télécharge et compile automatiquement, y-arriveras-tu ?
    Moins de 4 heures, 30 minutes a tout cassé avec un café. Ça fait 10 ans je développe sous Windows. Comme tout, il faut connaitre et savoir comment faire avant d'accusés les autres de son manque de connaissance.
    De mémoire, la dernière en 10 minutes.

    Citation Envoyé par Suryavarman Voir le message
    Python si tu sais faire, ça te prendra 10min.
    C'est limite du troll la, dans ce cas va faire du python et arrête le C++ basta.

    Citation Envoyé par Suryavarman Voir le message
    Note: Pour Criterion c’est pas Cygwin que j’utilise… il faut lire un peu plus (ou que j’apprenne à mieux écrire en Anglais, ou écrire tout cour).
    je quote tes premières phrases d'ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    How do i  install Criterion dependencies?
    Meson can’t build Criterion on Windows.
    
     The depedencies:
     
    
    et plus loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    I tried, but Meson does not recognise icx.
     MINGW64 /c/lib/Criterion ((v2.4.1))
    $ icx
    Bon alors si tu précises que tu installes Cygwin64 c'est que tu l'utilises, ou alors tu installes tout et n'importe quoi dans l'espoir que ça marche...
    Je n'ai pas lu la suite, trop long, d'ailleurs personne ne lira d'ailleurs... Personne n'a répondu et probablement car c'est juste un gros spam
    https://github.com/Snaipe/Criterion/discussions/449

    Citation Envoyé par chrtophe Voir le message
    Je ne suis pas développeur, mais la 1ère question que je me pose : est-ce vraiment un problème Cmake ?
    Il se peut que ce soit un problème d'utilisation de celui-ci, ou lié à une dépendance précise.

    Si tu ne fais pas de crossplatform, il serait peut-être mieux d'utiliser les outils natifs Microsoft. Ca contrournerai peut-être ton prob.

    Malheureusement, je pense pas que ce que je dis te fasse avancer.
    Oui tu as raison, quand je dis "c'est un problème de CMake" c'est que le problème est lié à CMake dans le sens "l'utilisation qui en est fait et possible limitation technique".
    Mais c'est certainement pas à cause de Windows que la gestion des dépendances est compliquées, c'est le problème du langage C/C++ qui n'ont pas d'outils standard pour gérer des dépendances comme python, rust, .net... et donc des outils non standard vienne ajouter leurs solutions et leurs problèmes.

Discussions similaires

  1. Réponses: 14
    Dernier message: 10/04/2014, 17h10
  2. Gestion des dépendances pour un package sur PyPI
    Par rambc dans le forum Général Python
    Réponses: 2
    Dernier message: 26/09/2013, 00h07
  3. Réponses: 0
    Dernier message: 17/09/2013, 22h25
  4. documentation sur la gestion des dépendances
    Par masterboy01 dans le forum Maven
    Réponses: 1
    Dernier message: 16/09/2009, 13h00
  5. [Exception]Gestion des exceptions, capture sur la classe.
    Par @lantis dans le forum Général Java
    Réponses: 9
    Dernier message: 22/07/2005, 19h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo