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++

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

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    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.
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

  2. #2
    Membre éclairé

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    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 chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    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?
    Homer J. Simpson


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

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    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).
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 437
    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 : 17 437
    Points : 43 078
    Points
    43 078
    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 chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    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.
    Homer J. Simpson


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

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    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.
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

  8. #8
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Salut,

    Tu peux le prendre comme tu veux, je suis pas ici pour justifier quoi que ce soit.

    La communauté du C++ est pourri par des mauvaises pratiques, des mauvais conseils et une batterie de junior qui pense tout savoir après 1 stage.
    De gens, qui font par exemple du Python et du Java, qui viennent faire du C++ et disent que c'est de la m*rde juste parce qu'il pense comme en Java ou Python... D’où ma phrase "C'est un métier".

    Dans ton post il n'y a aucune question, pas un seul point d'interrogation, juste un déferlement de "Windows c'est de la m*rde". Alors je dis, et je le dis à tous les gens qui réagisse comme ça fasse à une difficulté : "Apprends, remets tes connaissances en question et ton jugement aussi. C'est pas moins ou plus facile sous Linux ou Windows, c'est différent, et en ça, pour être bon il faut s'adapter, remettre en question soi-même et ses connaissances. Et pas juste hurler que c'est nulle, auxquels cas, il faut changer de métier et laisser les professionnels travailler tranquillement."

    Ce qui est une torture en C++ c'est de repasser dans du code fait par qui gens qui ne s'adapte pas. Comme ceux dont la première réaction quand ils arrivent est de dire "La convention de code est pourrie il faut la changer" ou "Ça c'est nulle bouh!". Le bon réflexe est justement de dire, bon, je vais changer MA façon de faire pour m'adapter à l'existant. Et la dans ton cas l'existant c'est Windows, donc adapte toi et ouvre les bras à Windows. Fais la paix avec Windows. Peace
    Homer J. Simpson


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

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    Par défaut
    Je n'arrive pas à mettre le doigt sur ce qui me manque pour y arriver correctement.
    Si tu as le temps pourrais tu faire une capture vidéo de comment tu créés un projet CMake avec l'inclusion d'une libraire qui sera télécharger et compiler? Si possible une librairie avec au moins une dépendance à télécharger et compiler aussi.
    Et cerise sur le gâteau avec la possibilité qu'elle n’apparaît pas dans la solution générée par CMake.

    Cela fait longtemps que je compile des projets CMake sous Windows. J'ai toujours eu l'impression de passer à côté d'un truc. De plus si un truc de mauvais devait mal se passer il se produisait.
    J'en ai eu tellement marre que j'avais créé ce projet.
    https://sourceforge.net/p/gdeps/merc...tree/Projects/

    Je l'ai abandonné après quelques années parce-que je voulais passer mon temps libre à faire autre chose que d'essayer compiler les projets des autres. Et j'en ai passé du temps libre à compiler des projets c++ sur Windows. Je suis alors allé faire mon projet personnel sous Linux et ça n'a pas été facile non plus mais tout de même moins.

    Cela ne veut pas dire que je fais bien les choses mais que je sais de quoi je parle: Compiler sous wndows des librairies c++ peut s'avérer un vrais calvaire.

    Pour mon premier message, je le vois comme mon cris de raz le bol. Car c'est mon constat sur toutes les dépendances que j'ai dû essayer de compiler sous Windows depuis 2006. Le «récit» de mon expérience. Et j’emploie le mot torture car c'est actuellement encore une torture pour moi. C'est frustrent, c'est énervent, c'est consommateur de temps, c'est bordélique…

    Et je suis vraiment très curieux de savoir comment tu fais. Car ton expérience me semble très positive.
    Alors je me demande:
    - Qu'elles sont tes bonnes pratiques?
    - Utilises-tu des librairies bien faites? ou te risques tu à utiliser des librairies un peu moins bien conçues au niveau de leur compilation?
    - Le dis-tu car tu ne réalises pas la complexité que cela peut-être?T'es tu trop braqué sur ma critique pour avoir un raisonnement éclairé?
    - etc
    Donc je suis très curieux: car si ce que tu dis est vrais je pourrais peut-être me libérer de cette souffrance grâce à ton aide.
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Perso je n'adhère pas du tout à CMake que je trouve imbuvable à cause de sa syntaxe.
    Je préfère largement premake mais je sais pas où son support en est... le projet semble pas super vivant.
    Ou, passage chez Ubisoft oblige, sharpmake, qui est pas mal la même chose en C# et une copie de Unreal Build Tools.
    Parce que écrire des scripts en Lua ou C# c'est tout de même plus simple et lisible que le pseudo powershell/batch/shell/quoi que ce soit que CMake offre pour ma part.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    Par défaut
    Je prend note de premake. Je vais regardé.
    https://github.com/premake/premake-core
    Il semble tout de même vivant.

    Sharpmake semble être seulement pour visual studio.
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

  12. #12
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    De mon coté j'utilise beaucoup visual studio, et les nuget (une sorte d'équivalent des package sous linux), c'est simple, efficace et ça gère les dépendances de dépendances facilement. C'est géré nativement par visual studio et la mise en place est super simple (juste un ou deux fichier à écrire pour définir le contenu du package et l'endroit du déploiement des binaires)

    J'utilise beaucoup CMake pour les projets statique, la prise en main est assez pénible au début mais au fur et à mesure, on y prend gout et on découvre toute la puissance de l'outil, mais sans besion de cross-compil, je n'y vois pas trop d'intérêt.


    Pour donner un exemple, le projet sur lequel je travail possède en dépendance un peu plus d'une 30aine de lib, donc les modifications de version arrivent très souvent et se fait en quelques clics dans visual ^^.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  13. #13
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Citation Envoyé par Suryavarman Voir le message
    - Qu'elles sont tes bonnes pratiques?
    Avec CMake? je dirais que les bonnes pratiques c'est que si tu veux pas de multiplateforme, n'utilise pas CMake mais Visual Studio
    Ensuite CMake, c'est une horreur ça nous sommes tous d'accord la dessus, même ceux qui travaille sur CMake :p, il y a des conférences à la CPPCon sur le Modern CMake qui sont intéressantes :
    .
    Mais de bonne pratique non j'en ai pas vraiment. Disons que j'applique ces quelques règles de mon côté:
    - Utiliser le modern CMake ( target_xxx )
    - Ordonner les dépendances dans un dossier type (third_party/...) et utiliser add_subdirectory(third_party/...)- J'ai l'habitude d'ajouter GoogleTest dans un third_party/test/framework/googletest ( googletest contient le code de google test cloner sans aucune modification)
    - La dans le dossier framework je met un CMakeLists.txt qui contient l'ajout du framework googletest
    Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    add_subdirectory(GoogleTest)
     
    set_target_properties(gtest PROPERTIES FOLDER Test/Framework/GoogleTest )
    set_target_properties(gtest PROPERTIES ARCHIVE_OUTPUT_DIRECTORY${OUT_DIR})
    set_target_properties(gtest PROPERTIES PDB_OUTPUT_DIRECTORY${OUT_DIR})
     
    set_target_properties(gtest_main PROPERTIES FOLDER Test/Framework/GoogleTest )
    set_target_properties(gtest_main PROPERTIES ARCHIVE_OUTPUT_DIRECTORY${OUT_DIR})
    set_target_properties(gtest_main PROPERTIES PDB_OUTPUT_DIRECTORY${OUT_DIR})
     
    # Ajouter les options de compilations maisons etc...
    - Dans le projet de test j'ajoute la dépendances dans son CMakeLists.txt
    Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    add_test(NAME MyTargetName COMMAND${target_name} --gtest_output=xml:../../../TestReports/test_report.xml --extra-verbose --gtest_break_on_failure)
    add_dependencies( ${target_name} gtest)
     
    target_link_libraries(${target_name} PRIVATE gtest)
    Et c'est tout... Après il y a 1000 façon de faire ça. C'est juste un exemple. Mais ça marche pour le moment, j'ai pas eu de souci particulier avec d'autres projets non plus.
    J'aime bien faire en sorte que mon architecture ne dépendent pas d'un outil de build particulier.

    Citation Envoyé par Suryavarman Voir le message
    - Utilises-tu des librairies bien faites? ou te risques tu à utiliser des librairies un peu moins bien conçues au niveau de leur compilation?
    Ah bas ça... J'utilise ce que je dois utiliser

    Citation Envoyé par Suryavarman Voir le message
    - Le dis-tu car tu ne réalises pas la complexité que cela peut-être?T'es tu trop braqué sur ma critique pour avoir un raisonnement éclairé?
    La je viens d'expliquer pourquoi ça me prend 10 minutes. J'ai une technique qui fonctionne jusque là et je l'applique. Je regarde des conférences et ne traine pas sur StackOverflow...

    Citation Envoyé par Bousk Voir le message
    Perso je n'adhère pas du tout à CMake que je trouve imbuvable à cause de sa syntaxe.
    Je préfère largement premake mais je sais pas où son support en est... le projet semble pas super vivant.
    Ou, passage chez Ubisoft oblige, sharpmake, qui est pas mal la même chose en C# et une copie de Unreal Build Tools.
    Parce que écrire des scripts en Lua ou C# c'est tout de même plus simple et lisible que le pseudo powershell/batch/shell/quoi que ce soit que CMake offre pour ma part.
    J'avoue premake j'attendais la version 5 depuis plusieurs années.... j'ai fini par croire qu'il était mort.
    L'Unreal Build Tool est pas mal fait. Je m'étais amusé à faire un projet similaire avec Rozlyn.
    Homer J. Simpson


  14. #14
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Désolé pour le up .

    Je suis surpris (mais ce n'est pas un mal) que personne ne parle de conan. Alors, je dois dire que je ne suis pas un expert en système de compilation et gestion de dépendances, que pareillement à vous, je n'aime pas spécialement CMake (une syntaxe que j'ai mis du temps à comprendre et le fait que j'ai toujours l'impression de mal faire ce que j'implémente en CMake ), mais voici mon avis:
    • CMake n'est pas là pour gérer vos dépendances, il est là pour produire vos fichiers de compilations (communément appelé Makefile, mais aussi les projets pour vos éditeurs). Donc dans vos CMakeFiles, vous devez indiquer comment compiler le projet (où trouver la dépendance, comment la lier, ou mettre les fichiers compilés et bref, quels sont les binaires à créer et comment) ;
    • vous avez donc besoin d'un logiciel qui télécharge vos dépendances, pour la plateforme ciblées, avec la version voulue. Et c'est là que je pense que conan répond à ce besoin et que je pense qu'en demandant à CMake de télécharger/chercher une dépendance, c'est une possibilité (car CMake offre un langage de script et vous pouvez lancer toutes les commandes que vous souhaitez), mais que ce n'est pas son rôle.


    Alors, conan n'est pas le seul, mais disons qu'il gagne en popularité. Accessoirement et pour obtenir une solution plus simple, on pourrait aussi penser au git submodules, mais les git submodules sont bon pour faire des git clone des projets dépendants, ce qui veut dire : le code de la dépendance, et donc qu'il faut compiler à chaque fois la dépendance (chose que l'on ne veut pas).

    Note : personnellement, je n'aime pas non plus travailler avec Windows, mais j'ose croire qu'un développeur habitué de Windows dira de même de mon workflow sous Linux basé sur le terminal et la ligne de commande. Autrement dit, ce n'est pas vraiment Windows le problème (comme dit plus haut), le problème est plus que en 2022, alors que nous avons des outils qui permettent d'inclure des dépendances en une ligne (npm, pip, cargo), le C++ est vraiment une galère face à la facilité proposée par les autres langages.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 36
    Points : 27
    Points
    27
    Par défaut
    J'arrive également après la bataille, mais je confirme les dires juste au dessus.

    Les deux gros gestionnaires de librairies C et C++ (j'exclus les gestionnaires systèmes, qui de par leur nature ne sont pas multi-platforme) sont actuellement conan et vcpkg.

    Ma préférence va largement à conan, mais vcpkg fonctionne bien également. L'op, tu as surement mal configuré ton projet ou tu ne sais pas bien te servir de CMake.

    Pour reprendre ton message initial avec libcurl en dépendance, voici à quoi devrait ressembler ton CMakeLists.txt (quel que soit la manière dont tu as installé tes dépendances), et ici je prends l'exemple de conan où tu dois créer un conanfile.txt (imagine un requirements.txt comme pour pip en python), les deux à la racine de ton projet:

    conanfile.txt

    Code ini : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [requires]
    libcurl/7.87.0
    [generators]
    CMakeToolchain
    CMakeDeps

    CMakeLists.txt

    Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cmake_minimum_required(VERSION 3.15)
    project(foobar)
     
    find_package(CURL REQUIRED)
     
    add_executable(foo ...)
    target_link_libraries(foo PRIVATE CURL::libcurl)

    Tu te places à la racine de ton projet, et tu lances ces commandes pour successivement installer les dépendances, lancer la configuration CMake, puis le build de ton projet (le tout en "build type" Release ici):

    conan install . -of cmake-build-release -b missing -s build_type=Release
    cmake -S . -B cmake-build-release -DCMAKE_TOOLCHAIN_FILE=cmake-build-release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
    cmake --build cmake-build-release --config Release
    Voilà c'est fini...

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