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 :

Gmake et script shell


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 508
    Par défaut Gmake et script shell
    Bonjour,
    je debute dans les script shell et honnetement je n'y comprend pas grand chose.
    j'ai un script shell dja existant qui permet de compiler / installer / desinstaller plusieurs projets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #!/bin/sh
     
    ROOTDIR=`pwd`; export ROOTDIR
     
    case ${1} in
    	debug)
    		CONFIG="DEBUG"; export CONFIG
    		OUTDIR="${ROOTDIR}/Debug"; export OUTDIR
    		;;
    	release)
    		CONFIG="RELEASE"; export CONFIG
    		OUTDIR="${ROOTDIR}/Release"; export OUTDIR
    		;;
    	profile)
    		CONFIG="PROFILE"; export CONFIG
    		OUTDIR="${ROOTDIR}/Profile"; export OUTDIR
    		;;
    	*)
    		echo "Usage: `basename $0` <debug|release|profile> [clean|distclean|depend|all|install|deinstall]"
    		exit 2
    		;;
    esac
     
    if ! test -d "${OUTDIR}" ; then
    	mkdir -p "${OUTDIR}"
    fi
     
    case ${2} in
    	distclean)
    		gmake distclean && rm -rf "${OUTDIR}"
    		;;
    	install)
    		gmake all && su root -c "${ROOTDIR}/install.sh install"
    		;;
    	deinstall)
    		su root -c "${ROOTDIR}/install.sh deinstall"
    		;;
    	*)
    		gmake $2
    		;;
    esac
    ce que j'aimerais c'est que lors d'une commande "basename $0 php install" par exemple ca me compile tous les projets et lorsque que je fais une autre commande "basname $0 release install" par exemple ca ne me prenne pas le dossier clientphp.
    voici mon makefile a la racine de mes dossiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SUBDIR=		doc			\
    			common		\
    			server		\
    			proxy		\
    			client		\
    			clientphp	\
    			tests		\
    			bin
     
    include ./build/freeage.subdir.mk
    Pour faire simple si on a tape "php" dans la ligne de commande : inclure tous les sous dossiers sinon ne pas inclure clientphp

    merci d'avance

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fooshi Voir le message
    ce que j'aimerais c'est que lors d'une commande "basename $0 php install" par exemple ca me compile tous les projets et lorsque que je fais une autre commande "basname $0 release install" par exemple ca ne me prenne pas le dossier clientphp.
    Désolé, la commande "basename" existe déjà. C'est comme si tu disais "je voudrais que quand on appelle "ls" ça affiche la date. Bon, bien entendu, rien n'interdit de se créer sa propre commande "basename" mais c'est un peu risqué.

    Par ailleurs, c'est quoi "$0" pour toi ? Parce que $0 contient le nom du programme dans lequel on se trouve (le nom de ton shell si la commande qui fait appel à $0 est exécutée en console de travail et le nom de ton script si la commande qui fait appel à $0 est dans un script en train de s'exécuter).

    Donc à te lire, tu voudrais une commande "basename" à laquelle tu passes en argument le nom de ton shell, puis la chaine "php" et la chaine "install" et qui va faire une action. Et si on passe en paramètre le nom de ton shell, la chaine "release" et la chaine "install" il va faire une autre action. Déjà, il y a 2 des 3 paramètres identiques dans les deux cas donc on peut se demander leur rôle dans tout ça.

    Bref c'est assez flou ton besoin...

    Ici http://fr.lang.free.fr/cours/Shell_v2.0.pdf un cours complet de shell. Commence par le parcourir ce qui te permettra de comprendre le script que tu nous as montré et qui te permettra de clarifier ton besoin...

    [edit] Je crois que je commence à piger. Tu voudrais modifier le script pour y rajouter les mots "php" ou "release" en plus des mots prévus (debug, profile, etc). Tu remarqueras que le mot "release" est déjà présent.

    Le problème, c'est que les actions du script sont simplement d'appeler gmake. Et c'est gmake qui se charge de tout traiter.
    Et la façon qu'à gmake de tout traiter est simplement la suivante: "j'ai une source qui doit donner une cible au travers de telle opération". Partant de là, je ne vois pas trop comment lui dire "tout sauf php". Ou alors faut tout repenser le makefile et repartir sur une notion "je fais chaque chose individuellement" puis certains mots clefs seront "cette cible dépend de plusieurs choses". Là on peut alors choisir de mettre ou ne pas mettre php dans la source servant à faire la cible. Mais c'est un travail assez sévère qui nécessite de posséder tout le projet pour tester la chaine de compilation et qui nécessite de connaitre le Makefile aussi. Et ça, c'est un peu hors de portée...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre éclairé Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 508
    Par défaut
    J'ai resolu mon probleme c'est vrai que ma question etais assez floue aussi, mais j'ai géré mon probleme dans les makefile et dans mes fichiers .mk.
    merci quand meme.

Discussions similaires

  1. Script shell
    Par anzar dans le forum Linux
    Réponses: 4
    Dernier message: 03/12/2004, 14h41
  2. [JSP] script shell
    Par goolix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/08/2004, 09h08
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 13h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 09h24

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