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

Linux Discussion :

Déploiement d'un projet C/C++ sous linux


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Par défaut Déploiement d'un projet C/C++ sous linux
    Bonjour à tous,

    J'espère me trouver sur le bon forum, vu que cela touche d'autres forums possibles.

    J'ai un projet sous Code::Blocks (un émulateur S/HiRes/Chip8, C/C++, wxWidgets et OpenGL, github: https://github.com/Ready4Next/Chip8Emu) et je souhaiterais pouvoir le distribuer sans devoir obliger l'utilisateur à recompiler, sous la forme d'un .deb voire pourquoi pas un apt sous ubuntu. La compilation en ligne de commande fonctionne, grâce à cbp2make. Par contre, venant d'un système Windows, j'ai beaucoup de mal à trouver des infos sur:

    - Comment et est-ce utile de créer un ./configure ?
    - Autotools et c::b ?
    - Comment rédiger le make install sous c::b (section install du makefile) ? Car ce serait pas mal si je pouvais créer une icône dans le menu "Jeux" par exemple...
    - Quels sont justement les entrées par défaut pour les nouvelles applications ?
    - Et... (HS mais je tente...) Quelqu'un à réussi à effectuer une compilation cross-platform avec mingw et -std=c++11 ?
    - Si ça peut être utile, je suis sous Linux Mint 16...

    Quand j'ai recherché des informations par moi-même, je n'ai pas pu trouver ce genre d'informations (installer quelque chose, oui, mais créer le script :-/). Je souhaiterais en gros, si vous en avez connaissance, des liens vers des procédures "standards" dans la création de scripts pour configure, make install et surtout l'endroit où doivent se trouver les fichiers pour être cohérent avec l'existant sous KDE, gnome ou autre...

    Merci d'avance !

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Bonjour,

    Déjà tu as bien compris la logique manifestement. Effectivement les deux moyens les plus simples sont de fournir les binaires finaux en utilisant le système de paquages (.deb pour la famille Ubuntu, .rpm pour la famille redhat, et un .tar.gz classique contenant les sources à compiler).

    Tu peux donc faire/fournir les trois...ou que les sources à toi de voir comment tu veux procéder.

    pour créer un compilable quasi-cléf en main, effectivement tu dois fournir en standard dans ton .tar.gz contenant les sources les éléments suivants :
    • README.txt expliquant la structure et la procédure de compilation
    • Makefile le make file de base avec les éléments de compilation par defaut
    • configure le fichier script qui permet à l'utilisateur de passer des options et surtout de tester la confirugation de la machine de l'utilisateur pour adapter le Makefile


    le README et le Makefile ça c'est facile c'est toi qui défini tout.

    le configure c'est un peu plus complexe, mais l'idée de base c'est de :
    • vérifier l'architecture hardware compatible avec ce que ton code à prévu (type de cpu, quantité de ram à la limite si ton code doit être adaptatif)
    • vérifier la presence des librairies nécéssaire au succès de la compilation, (à moins que ton code livre ses propores librairies)
    • vérifier la version et la précense des compilateurs nécéssaires
    • vérifier les droits d'écriture dans les fichiers de configuration et les repèrtoires dans lesquels ta compilation va poser certains fichiers (/lusr/lib, /usr/share, /usr/bin, etc....etc....)
    • vérifier les options/paramêtres passés par l'utilisateur
    • modifier le Makefile de base en concéquence de tout ça
    • compiler les différents éléments
    • Installer les fichiers dans leurs emplacements dédiés en focntion de leurs roles (man pages, binaires, librairies, fichiers de documentation etc...etc...)


    tu peux essayer de te baser sur autoconf y'a un wiki sur le sujet ... par exemple...
    le faire 100% à la main ça risque d'être chaud....
    tu peux aussi prendre modèle sur un projet très simple existant

    étant pas codeur, c'est tout ce que je peux t'indiquer...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Par défaut
    Merci frp31 pour ces éclaircissements ! En ce qui concerne le script du Makefile et du Configure, je vais essayer de trouver des infos sur le "comment ça marche" ;-) (j'ai conscience que ce soit peut-être plus dans les cordes d'un développeur / intégrateur, peut-être devrais-je réitérer ma question dans le forum approprié ?). C'est gentil d'avoir pris le temps de me répondre, ça m'aide beaucoup ;-).

    A tout hasard, existerait-il une hiérarchie typique des dossiers utilisables par défaut, j'ai souvenance de Linux Standard Base, qui inclut je crois une arborescence de base de tout système Linux, mais est-ce applicable à toutes les distributions actuelles ? L'application est déjà disponible et compilable depuis les sources présentes sur GitHub en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make -f Chip8Emu.cbp.mak.unix
    , les seuls points que j'ai encore un peu de mal à saisir sont (corrige moi si je me trompe):
    • Le projet est compilé en mode Release, le binaire est créé. Je souhaite qu'il soit accessible partout par l'utilisateur en cours, je dois juste copier l'exécutable dans /usr/bin ? Avec un chmod +x dessus ? Et pour ce faire, je dois créer une section install dans le MakeFile ?
    • J'utilise wxWidgets, OpenGL et SDL, dois-je les copier moi-même dans usr/lib ? Ou existe-t-il un programme de création de package ? Checkinstall fait ça, je pense, se base-t-il sur le makefile ?
    • Comment sont gérés les entrées dans le menu des programmes sous gnome, KDE ou autre ? Est-ce standard aussi ?


    J'ai conscience de demander beaucoup, je ne souhaite pas que vous fassiez ce travail à ma place, un simple lien vers une documentation quelconque me statisfera amplement ;-).

    Merci !

    Bonne soirée,

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 158
    Billets dans le blog
    152
    Par défaut
    Bonjour
    Citation Envoyé par Junta2013 Voir le message
    Le projet est compilé en mode Release, le binaire est créé. Je souhaite qu'il soit accessible partout par l'utilisateur en cours, je dois juste copier l'exécutable dans /usr/bin ? Avec un chmod +x dessus ? Et pour ce faire, je dois créer une section install dans le MakeFile ?
    Il faut une section "install" dans le Makefile, car le fait d'écrire dans /usr/bin demande à avoir un accès administrateur. En théorie, le make, simple, n'a pas besoin de tel accès (comprendre : on peut compiler un programme en étant simple user), et uniquement pour l'installation, des privilèges supérieurs seront nécessaires.
    J'utilise wxWidgets, OpenGL et SDL, dois-je les copier moi-même dans usr/lib ? Ou existe-t-il un programme de création de package ? Checkinstall fait ça, je pense, se base-t-il sur le makefile ?
    Pas besoin de les copier vous même, vous pouvez partir du principe que les dépendances sont installés (et c'est mieux de faire ainsi). Ce n'est pas à vous de gérer les bibliothèques. Avec autotools, la vérification est effectuée dans le ./configure. Tant que la bibliothèque n'est pas installé, on ne peut pas compiler.
    Comment sont gérés les entrées dans le menu des programmes sous gnome, KDE ou autre ? Est-ce standard aussi ?
    Je doute que ce soit standard

    J'ai conscience de demander beaucoup, je ne souhaite pas que vous fassiez ce travail à ma place, un simple lien vers une documentation quelconque me statisfera amplement ;-).
    Il faut demander beaucoup
    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.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Par défaut
    Merci LittleWhite et frp31,

    J'ai donc pu créer le ./configure relatif à mon projet grâce à vos explications et autotools ^^. Voici un "petit guide" qui ne paie pas de mine, mais qui a le mérite de fonctionner (dans la plupart des petits projets sous Code::Blocks):

    Conversion cbp --> autotools

    1 - cbp2make -in <project>.cbp (--all-os)
    Création du makefile en tant que <project>.cbp.mak si pas d'option --all-os, <project>.cbp.mak.unix sinon

    2 - mv <project>.cbp.mak Makefile
    Création du Makefile de base nécessaire à autoscan pour déterminer ce qui doit être vérifié sur la machine cliente via le ./configure

    3 - autoscan
    Création du fichier configure.scan

    4 - mv configure.scan configure.ac
    Déplace configure.scan en configure.ac nécessaire avec autoconf. autoscan n'écrit pas directement dans le fichier .ac, dans le cas où on l'aurait modifié par nous-même avant d'appeler autoconf.

    5 - autoconf
    Crée ./configure

    6 - mv Makefile Makefile.in
    ./configure crée le fichier Makefile, en se basant sur un template existant (Makefile.in). Pour éviter qu'il n'écrase notre Makefile, on fait de lui le template par défaut

    7 - ./configure
    Crée le nouveau Makefile dépendant de la machine cliente si toutes les ressources nécessaires sont présentes

    8 - make (all clean)
    Compile le projet (all clean se débarrasse de résidus laissés par les précédentes compilations)

    Première étape franchie, donc... Reste la section install du Makefile dont j'aimerais qu'il tienne compte de l'environnement graphique pour la création des entrées dans le menu des applications KDE, gnome, lxde et Cie. Je vais chercher encore un peu...

    En tout cas, merci pour votre aide !

Discussions similaires

  1. Déploiement d'un projet sous Tomcat/Linux
    Par ridhatouir dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 19/08/2008, 09h19
  2. Compiler un projet BCB sous linux
    Par netsabes dans le forum C++Builder
    Réponses: 6
    Dernier message: 27/09/2007, 21h51
  3. Interface graphique pour projet gtk en C sous Linux
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 8
    Dernier message: 12/02/2007, 13h28
  4. Rechercher le source du projet NetFilter sous Linux
    Par Hirouchima dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 18/11/2005, 15h32
  5. Projet en C++ sous linux
    Par ZiMo dans le forum Linux
    Réponses: 12
    Dernier message: 13/06/2005, 18h41

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