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

Systèmes de compilation Discussion :

Quels outils pour un "makefile portable" ?


Sujet :

Systèmes de compilation

  1. #1
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut Quels outils pour un "makefile portable" ?
    Bonjour,

    Actuellement, je créé des petites bibliothèques avec QtCreator, il génère donc un .pro et un .pro.user.

    Mais je souhaiterais que les personnes qui souhaiteraient compiler mes bibliothèques n'aient pas besoin de télécharger QtCreator et puissent, quelque soit leur OS et leur IDE, compiler et installer les bibliothèques ou importer le projet dans leur IDE pour pouvoir travailler dessus.

    N.B. Il faudrait que la compilation et installation reste relativement simple pour être fait par des non-programmeurs.

    J'ai tout de suite pensé à CMake, mais j'ai aussi entendu parler de SCons, automake et premake.

    Quel(s) outil(s) me conseillez-vous? Pourquoi?

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    CMake est vraiment pratique et ne demande pas trop de ligne de code (contrairement au configure.ac que j'ai pu voir).
    Pour l'utilisateur, c'est toujours la même procédure (cd build, cmake .., make, make install). De plus CMake permet de vérifier (facilement) si les dépendances sont déjà installées (find_package, find_library)
    Avec Qt, il y a des commandes spécifiques (pour moc par exemple) (mais rien de bien méchant)

    Les solutions de compilation ne sont pas exclusives

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Je plussoie largement l'utilisation de cmake. Le principal avantage que je lui voit est qu'il ne se contente pas de compiler du code, mais il génère des projets aux formats des IDE les plus courants, ce qui permet à ceux qui le souhaitent de travailler avec l'IDE de leur choix et de bénéficier des avantages procurés.

    J'ai fait la transition sur une grosse base de vieux code de simples makefile vers cmake, et le fait de pouvoir sous windows utiliser visual studio, avec sa complétion, son intellisense et tout, était un grand avantage !
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    N.B. Il faudrait que la compilation et installation reste relativement simple pour être fait par des non-programmeurs.
    A mon sens, l'installation de Qt (1 seul fichier à installer en général sur windows et linux, sur mac il faut également XCode) est probablement le plus simple en général (ide, compilateur et libs installé)

    La première question est est-ce que tu utilises Qt dans ton code ?

    Si tu fais du C++ standard sans lib, il faudra quand même installer cmake et il faudra configurer l'ide si l'utilisateur ne l'a pas encore fait ou (pire) utiliser le mode console

    Avec des libs (non Qt), on faudra installer séparément les libs, chacune ayant probablement leurs propres systèmes de compilation (j'aime beaucoup boost, mais il faut avouer que l'install sous windows est pénible...)
    Déjà là, tu as perdu tous tes utilisateurs non dev

    L'utilisation de Qt te permet d'avoir un seul code, une seule lib pour la majorité des fonctionnalités (ihm, réseau, fichier, etc),un seul ide, un seul système de compilation
    Ca reste à mon sens le plus simple (pour débutant ou non)
    (et le moc, osef, perso, j'ai jamais eu à l'appeler manuellement en utilisant qt Creator)

    Sinon, le plus simple reste quand même de fournir tes libs déjà compilé

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    La première question est est-ce que tu utilises Qt dans ton code ?
    Non, je n'utilise pas Qt pour des raisons de licences.

    Citation Envoyé par gbdivers Voir le message
    Avec des libs (non Qt), on faudra installer séparément les libs, chacune ayant probablement leurs propres systèmes de compilation (j'aime beaucoup boost, mais il faut avouer que l'install sous windows est pénible...)
    Déjà là, tu as perdu tous tes utilisateurs non dev
    Je suis un peu obligé d'utiliser boost

    Citation Envoyé par gbdivers Voir le message
    L'utilisation de Qt te permet d'avoir un seul code, une seule lib pour la majorité des fonctionnalités (ihm, réseau, fichier, etc),un seul ide, un seul système de compilation
    Ca reste à mon sens le plus simple (pour débutant ou non)
    (et le moc, osef, perso, j'ai jamais eu à l'appeler manuellement en utilisant qt Creator)
    Certains programmeurs/utilisateurs n'ont peut être pas envie de télécharger QtCreator juste pour ça (et certains n'aiment peut être pas QtCreator ou préfèrent un autre IDE).
    De plus, dès qu'on change de poste, il faut éditer quelques paramètres dans le .pro

    Sinon, le plus simple reste quand même de fournir tes libs déjà compilé
    Je ne peux pas les compiler moi-même pour toutes les plate-formes, je préfère donc les compiler pour les plate-formes que je possèdes et fournir un moyen de les compiler soit-même (et de me les soumettre pour rajouter le nombre de versions disponibles).
    De plus, je ne vais pas tout recompiller à chaque commit mais plutôt à chaque sortie de release.

    Sinon j'ai commencé à lire un tutoriel sur CMake, j'ai vu qu'il est possible de générer des fichiers de projet à partir de fichiers CMake, mais est-il possible (et recommandable) de faire l'inverse?

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    J'ai fini le tutoriel sur CMake et je suis un peu perplexe.

    Apparemment, il faut renseigner dans le CMakecache les dossiers où trouver les bibliothèques ainsi que les dossiers où stocker le résultat de la compilation même si on compile une bibliothèque. Et ce pour chaque architecture/distribution.
    Cela me parait vraiment très étrange...

    Pour les bibliothèques requises, on peut utiliser le module Find, qui permettrait de trouver les bibliothèques plus facilement mais j'ai du mal à comprendre son fonctionnement et son utilité.
    Sinon, si une dépendance (source/bibliothèque) est manquante, est-il possible d'indiquer une URL où la télécharger et de la compiler automatiquement dans le cas d'une bibliothèque ?

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour les bibliothèques, il y a deux philosophies :

    1 - Soit on considère que toutes les machines devant compiler le code seront assez semblables, avec les diverses bibliothèques installées au même endroit (par exemple, parce qu'elles sont stockées dans le système de gestion de code, parce qu'il y a une ghost qui sert de point de départ de toute machine de développement...). C'est assez souvent le cas chez un éditeur logiciel assez centralisé.

    Dans ce cas, des fonctionnalités comme find ne servent à rien d'autre qu'à fragiliser le système. Pour utiliser ces bibliothèques, il suffit d'utiliser les chemins relatifs/variables d'environnement... qui vont bien.

    2 - Soit on considère que les machines où le code va être compilées sont sans aucun contrôle, que chacun va utiliser une version différente de la bibliothèque installée où il l'a voulue. C'est probablement un modèle plus répandu pour le développement de code libre.

    Là, un système comme find va regarder aux endroits classiques d'installation et s'adapter automatiquement (dans la mesure du possible) à l'environnement de compilation sur lequel il se trouve.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Mais les "endroits" classiques d'installations peuvent changer selon la distribution Linux et sous Windows c'est un peu l'anarchie il me semble.

    Donc on essaye de mettre les dossiers les plus "répandus" et si l'utilisateur n'a pas une configuration habituelle, il doit modifier le cmakecache à la main ?

    Pour installer des bibliothèques ou en rechercher, est-ce que CMake génère automatiquement dans le cmake cache une variable contenant le chemin "usuel"/"officiel"/"par défaut" vers les bibliothèques sur l'environnement où on se trouve ?

  9. #9
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Citation Envoyé par Neckara Voir le message
    Donc on essaye de mettre les dossiers les plus "répandus" et si l'utilisateur n'a pas une configuration habituelle, il doit modifier le cmakecache à la main ?
    Heu, avec cmake-gui plutôt non?

    [EDIT]Sinon, il y a les cmake -DLALIB_DIR="chemin/vers/lalib"

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Points : 608
    Points
    608
    Par défaut
    Citation Envoyé par Neckara Voir le message
    J'ai fini le tutoriel sur CMake et je suis un peu perplexe.

    Apparemment, il faut renseigner dans le CMakecache les dossiers où trouver les bibliothèques ainsi que les dossiers où stocker le résultat de la compilation même si on compile une bibliothèque. Et ce pour chaque architecture/distribution.
    Cela me parait vraiment très étrange...
    Hum, es-tu sûr ? Normalement tu ne fais RIEN dans le CMakeCache, c'est automatiquement généré par CMake justement, à partir de la description de tes dépendances. Par exemple tu déclares avoir besoin de boost et automatiquement CMake ajoute dans le CMakeCache les chemins et paramètres qui vont bien pour le compilateur.

  11. #11
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Joker-eph Voir le message
    Hum, es-tu sûr ? Normalement tu ne fais RIEN dans le CMakeCache, c'est automatiquement généré par CMake justement, à partir de la description de tes dépendances. Par exemple tu déclares avoir besoin de boost et automatiquement CMake ajoute dans le CMakeCache les chemins et paramètres qui vont bien pour le compilateur.
    C'est ce qui est dit ici : http://florian-goujeon.developpez.co...nitiation/#LIV

    Et pour le Find c'est identique vu qu'on ne spécifie pas un chemin mais plusieurs.

  12. #12
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par Neckara Voir le message
    C'est ce qui est dit ici : http://florian-goujeon.developpez.co...nitiation/#LIV

    Et pour le Find c'est identique vu qu'on ne spécifie pas un chemin mais plusieurs.
    Je comprend mal ta remarque. Les lignes du cache du type : "BOOST_INCLUDEDIR:FILEPATH=/chemin/vers/boost_x_xx_x" sont définies automatiquement par des commandes du style "find_path" ou "find_library" dans FindBoost.cmake.

    Je te conseillerais facilement d'essayer de faire un finder pour une de tes dépendances en t'inspirant de celui ci : Modules/FindCURL.cmake. Tu trouveras plus de détail ici.

  13. #13
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par bretus Voir le message
    Je comprend mal ta remarque. Les lignes du cache du type : "BOOST_INCLUDEDIR:FILEPATH=/chemin/vers/boost_x_xx_x" sont définies automatiquement par des commandes du style "find_path" ou "find_library" dans FindBoost.cmake.
    "find_path" ou "find_library" ne sont pas magiques et se basent sur des chemins spécifiés dans les arguments.

    Mais apparemment, il y a une option qui permet d'utiliser le path ( ENV PATH) du système utilisé (mais est-ce qu'on peut obtenir le path de toutes les plateformes/distributions ?).

    Ceci résout donc le problème de recherche des dépendances.
    Pour le téléchargement et l'installation des dépendances manquantes, apparemment il serait possible de le faire avec CPack.

    Par contre comment savoir quel est le dossier à utiliser pour stocker les bibliothèques à compiler ? On le laisse au choix de l'utilisateur ?
    N'y a-t-il pas comme avec "ENV PATH", un moyen de récupérer le chemin "préféré" pour stocker les bibliothèques ?


    Donc si je résume :

    - Recherche des dépendances avec Find (+ ENV PATH) ;
    - Si pas trouvé, utilisation d'un CPack dédié (?) pour installer la dépendance manquante (mais il faut savoir où enregistrer les données) ;
    - Une fois toutes les dépendances trouvées, on peut enfin générer le makefile/fichier de projet etc...

  14. #14
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Il faut savoir que pour les libs les plus répandues (boost, freetype, curl, Qt, ...), CMake possède déjà les fichiers find qui vont bien et il est alors possible de faire ce genre de choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    find_package( Boost )
    # Va rechercher boost et mettre les entrées qui vont bien dans le cache
    # S'il ne le trouve pas, l'entrée BOOST_FOUND sera à FALSE et donc :
    if(BOOST_FOUND)
    	MESSAGE( STATUS "Found Boost" )
    	#On peut continuer
    else()
    	#On ne continue pas
    	MESSAGE( ERROR "Boost not found" )
    endif()
    Si la lib n'est pas trouvée (Boost pour continuer mon exemple) tu auras une entrée de type <Lib>_ROOT_DIR (Boost_INCLUDE_DIR pour Boost) à renseigner dans le cache.

    Une fois cette entrée renseignée avec le bon chemin, il suffit de relancer CMake.

    Pour les libs moins connues, comme des libs personnelles, tu peux créer toi-même un fichier Find<MaLib>.cmake (par exemple : FindFreeImage.cmake).

    Dans ton CMakeLists.txt tu pourras alors faire : find_package( <MaLib> )#Respecter la casse.

    Si ton fichier FindXXX est bien fait tu auras toi-même prévu l'entrée <MaLib>_ROOT_DIR qui permettra de déduire le dossier d'include, de libs, bin...

    Au final tu te tapes la majeure partie du boulot pour qu'au final l'utilisateur n'ait au pire que quelques chemins à renseigner.

    EDIT :
    Pour l'édition du cache, je recommande évidemment cmake-gui (et même cmake-qtgui si disponible) qui simplifie bien la tâche de l'utilisateur final et même le tien pendant le réglage de ton CMakeLists.txt
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  15. #15
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Au final tu te tapes la majeure partie du boulot pour qu'au final l'utilisateur n'ait au pire que quelques chemins à renseigner.
    Dans le cas où la bibliothèque n'est pas trouvée, je peux lui proposer de l'installer directement ?
    Est-ce possible de le faire de même avec le compilateur (s'il n'y a pas de compilateur installé de proposer une installation) ?

    Sinon avec CPack, je générer à partir du CMakeList.txt des installateurs/paquets pour que n'importe qui (même un non-informaticien) puisse installer le programmes + bibliothèques recquises ?
    Mais est-il possible de générer tout les installateur/paquets possible à partir de CPack ?

  16. #16
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Non, pour les libs manquantes l'utilisateur devra les télécharger lui-même et si besoin est les compiler par la même occasion.

    Pour CPack je ne peux pas te renseigner, je ne l'utilise pas.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  17. #17
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Non, pour les libs manquantes l'utilisateur devra les télécharger lui-même et si besoin est les compiler par la même occasion.
    Donc si j'ai 50 dépendances, il faut que l'utilisateur se fasse 50 compilations et installations de bibliothèques à la suite en allant rechercher à chaque fois où trouver la lib ?

    Je me suis déjà retrouvé à devoir compiler je-ne-sais-combien de dépendances pour un logiciel de traitement de son, c'est vraiment pas pratique

  18. #18
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    La solution serait donc de livrer les dépendances en même temps que les sources de ton projet, ainsi tu résous toi même tous les problèmes, mais c'est toi qui devras tout configurer afin de compiler toutes les dépendances, toussa...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  19. #19
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Je trouve que c'est un peu casse-tête...

    Je ne comprend pas qu'il n'existe pas de protocole répandu qui permettrait la compilation de tout et n'importe quoi juste en connaissant le compilateur a utiliser, les dépendances ainsi que des URLs où trouver les dépendances manquantes et/ou télécharger de quoi générer les dépendances manquantes.

    Ce ne serait pas super compliqué à implémenter, il suffirait juste qu'une grande majorité l'utilise et on aurait même plus à se prendre la tête

    Je pense que le plus simple va être de :
    - créer un petit wiki où on pourra ajouter le résultat de sa compilation ;
    - fournir un CMakeList.txt pour chaque "projet" simple qui lorsqu'il ne trouve pas une de mes bibliothèque donnera l'URL où trouver la dépendance manquante (ça doit être possible d'afficher un message personnalisé je pense (?) );
    - fournir un gros CMakeList.txt avec un zip de toute mes bibliothèques pour qu'il compile le tout ;
    - indiquer dans le CMakeList les dépendances qui ne sont pas des bibliothèques (ex : images, sons).

    Je m'assure juste que ça marche pour ma distribution, si ça ne marche pas chez quelqu'un, il modifie et fera part de ses modifications.
    Et si une dépendance qui ne fait pas partie de mes bibliothèques n'est pas trouvée, à l'utilisateur de se débrouiller lui-même.

    Est-ce une bonne stratégie ? J'ai un peu l'impression de dire à l'utilisateur "démerdes-toi", mais d'un autre côté je n'ai pas envie de passer 10 ans dessus.
    Cela me dérange vraiment de ne pas pouvoir fournir des fichiers de configurations qui permettraient de tout compiler "en un clic".

  20. #20
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Je ne comprend pas qu'il n'existe pas de protocole répandu qui permettrait la compilation de tout et n'importe quoi juste en connaissant le compilateur a utiliser, les dépendances ainsi que des URLs où trouver les dépendances manquantes et/ou télécharger de quoi générer les dépendances manquantes.
    Idem, mais ça, il faut s'en prendre aux gens qui se battent pour une liberté futile dans l'organisation des sources...

    Si on regarde la réaction des langages comme PHP quand c'est devenu le merdier, des conventions ont été posée dans le standard et hop : Composer.

    Mais en C++, tant que la template va, tout va. Qu'il soit impossible de gérer de manière standard des dépendances et des compilations : Tout le monde s'en cogne. Qu'il faille passer des moc et autres cochonneries pour enrichir le runtime : C'est la même.

    Espérons que les travaux sur les modules permettent d'y mettre un peu d'ordre, en attendant, cmake & co sera un moindre mal.

    Note : Ce que cmake gère mal, ce sont les dépendances des dépendances en compilation statique (l'utilisateur doit savoir que boost::thread va se mettre à dépendre de boost::chrono)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Quel outil pour diagrame UML pour Java ?
    Par yup dans le forum Outils
    Réponses: 5
    Dernier message: 27/08/2004, 16h24
  2. [Revue de code] Quels outils pour de grosses applis?
    Par franckR dans le forum Choisir un environnement de développement
    Réponses: 1
    Dernier message: 21/03/2004, 10h03
  3. Quel Outil pour les applis Industrielles ET bases de données
    Par ThierryAIM dans le forum Débats sur le développement - Le Best Of
    Réponses: 8
    Dernier message: 23/04/2003, 09h14
  4. Quel outil pour du développement Client/Serveur (Win XP) ?
    Par jey_bonnet dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 02/11/2002, 14h57

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