bash sed et makefile
Répondre à la discussion
Affichage des résultats 1 à 26 sur 26

bash sed et makefile



  1. #1
    bbdoll

    bash sed et makefile


    ------

    Bonjour tout le monde,

    J'ai rédigé un script (en bash) et un makefile.
    Je souhaiterais inclure dans le makefile different flag d'optimisation par exemple dans mon makefile j'ai la ligne suivante :

    main.o :langage_C/main.c

    gcc -c -DTYPE_FLOAT -flagOp langage_C/main.c


    Dans mon script je fait la commande suivante :

    #on utilise les flag d'optimisation
    sed s/^-flagOp/O1/ Makefile

    sauf qu'après l'execution de mon script le makefile reste inchangé.

    Or comme ovus l'auriez compris j'aurais aimé qu'il me change mon flagOp en O1 (pour flag d'optimisation O1)
    Quelqu'un aurait une solution à mon problème?

    Bien Cordialement

    -----
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  2. #2
    Paraboloide_Hyperbolique

    Re : bash sed et makefile

    C'est normal, sed renvoi par défaut la version modifiée du texte dans la sortie standard: à savoir l'écran.

    Si vous voulez qu'il modifie (remplace) votre fichier, vous devez taper dans votre fenêtre de commande:

    sed s/^-flagOp/O1/ Makefile > Makefile

    Je ne me trompe pas, cela redirigera le flux issu de sed de la sortie standard vers le fichier.

  3. #3
    lou_ibmix_xi

    Re : bash sed et makefile

    Pour compléter la réponse pour sed, il y a l'option "-i" également

    Mais tu peux appeler make en précisant des variables, ou encore faire une cible spécifique pour des optimisations.

    Dans un cas comme dans l'autre (sed et make), le "man" ("man sed", "man make") est là pour ça...

  4. #4
    bbdoll

    Re : bash sed et makefile

    Citation Envoyé par Paraboloide_Hyperbolique Voir le message
    C'est normal, sed renvoi par défaut la version modifiée du texte dans la sortie standard: à savoir l'écran.

    Si vous voulez qu'il modifie (remplace) votre fichier, vous devez taper dans votre fenêtre de commande:

    sed s/^-flagOp/O1/ Makefile > Makefile

    Je ne me trompe pas, cela redirigera le flux issu de sed de la sortie standard vers le fichier.
    Eh bien en fait quand je fais ca il me vide tout mon fichier makefile, mon makefile devient tout blanc et impossible de faire un ctrl+z
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  5. A voir en vidéo sur Futura
  6. #5
    bbdoll

    Re : bash sed et makefile

    Après quelques recherches supplémentaires + les indications données dans le forum j'ai écris ca dans mon script :

    sed -re 's/Op/O1/g' Makefile

    maintenant dans la console il m'écrit tout ce qu'il y avait dans le Makefile en ayant bien remplacé Op par O1.
    Donc il fallait surtotu ajouté l'option g derrière
    Malheureusement il ne me change pas le Makefile et qd je fais une redirection come tu me l'a sugéré >Makefile il m'efface tout le contenu du Makefile
    Et ca je ne vois pas de solutions... encore
    Bien cordialement.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  7. #6
    bbdoll

    Re : bash sed et makefile

    Finallement j'ai trouvé il fallait utilisé l'option -i comme suggéré par lou_ibmix_xi
    et non -re comme suggéré dans certaines sites.
    Je vous remercie tous les deux.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  8. #7
    bbdoll

    Re : bash sed et makefile

    Désolée si je vous embete encore, j'aurais du poser le problème en meme temps une fois :
    j'aimerais changer la valeur près du O. Je m'explique :
    j'ai tenté une boucle :

    let "m = 1"
    while [ $m -ne 4 ]; do

    sed -i 's/Op/O$m/g' Makefile

    let "m +=1"

    done

    et du coup Op il me le remplace par O$m et non O1, O2, O3
    je sais qu'avec echo $m il le comprend très bien mais comment faire avec sed que mettre pour qu'il m'écrive vraimentla vrai valeur de m ?

    Cordialement.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  9. #8
    lou_ibmix_xi

    Re : bash sed et makefile

    Ahhh les joies du BASH, je pense que le problème vient du fait que tu utilises les simples guillemets, du coup l'expression entre simple guillemet est prise textuellement, si tu veux que l'identifiant de la variable soit remplacée par sa valeur, il faut utiliser les guillemets doubles (sous le 3).

    PS 1: sed, awk, grep et bash (ou un autre "vrai" shell avec les tubes et les redirections) sont vraiment des outils puissants lorsque l'on bricole, ça vaut vraiment le coup de s'y intéresser comme tu le fais.

    PS 2: _MAIS_, tu utilises un autre outils génial qui est "make", et comme je te le disais dans mon 1er message, make te permet de faire ce que tu désires d'une manière nettement plus "propre". Un bon réflexe est d'utiliser les outils comme il faut, plutôt que de bricoler.

  10. #9
    bbdoll

    Re : bash sed et makefile

    Citation Envoyé par lou_ibmix_xi Voir le message
    Ahhh les joies du BASH, je pense que le problème vient du fait que tu utilises les simples guillemets, du coup l'expression entre simple guillemet est prise textuellement, si tu veux que l'identifiant de la variable soit remplacée par sa valeur, il faut utiliser les guillemets doubles (sous le 3).

    PS 1: sed, awk, grep et bash (ou un autre "vrai" shell avec les tubes et les redirections) sont vraiment des outils puissants lorsque l'on bricole, ça vaut vraiment le coup de s'y intéresser comme tu le fais.

    PS 2: _MAIS_, tu utilises un autre outils génial qui est "make", et comme je te le disais dans mon 1er message, make te permet de faire ce que tu désires d'une manière nettement plus "propre". Un bon réflexe est d'utiliser les outils comme il faut, plutôt que de bricoler.
    Oui effectivement c'est ce qu'il fallait faire. Donc pour toi je pouvais faire toutes ces choses dans le makefile ? le problème c'est que je ne sais pas très bien utilisé le makefile pour le moment. Je voulais lancé des compilation et execution automatiquement un certain nombre de fois et je pensais qu'il fallait le faire à partir du script; C'est vrai que ca fait bricolage. Loool. qu'elle est la différence si je lance des compilation et execution depuis un script.sh et si je le fais directement dans le make ?
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  11. #10
    lou_ibmix_xi

    Re : bash sed et makefile

    C'est plus une question de principe que vraiment un problème concret.

    Lorsque tu apprends a te servir d'un outils, il faut connaître (au moins dans les grandes lignes) ses possibilités et ses limitations. Ainsi, lorsque tu es confronté à un problème concret, tu choisis le / les outils appropriés et tu assembles le tout avec ta confiture de shell (ou autre). Si tu n'utilises pas les outils "comme il faut", tu risques de faire du travail inutile, ou inutilement compliqué. Et ce sont deux sources d'erreurs potentielles, de travail supplémentaire (documentation maintenance etc...). Bref, un bon informaticien est un informaticien "parresseux", il écrit le moins possible, en préférant des outils existant, car plus un bout de code a tourné, plus il a de chance d'avoir été nettoyer de pas mal de bugs, et moins il écrit, moins il insert de bugs...

    Dans ton cas concret, il n'y a rien de dramatique, au pire tu en auras marre d'incrémenter la version de ton makefile lorsque tu passeras sous gestionnaire de version (un autre outils très vite indispensable).

  12. #11
    bbdoll

    Red face Re : bash sed et makefile

    Citation Envoyé par lou_ibmix_xi Voir le message
    C'est plus une question de principe que vraiment un problème concret.

    Lorsque tu apprends a te servir d'un outils, il faut connaître (au moins dans les grandes lignes) ses possibilités et ses limitations. Ainsi, lorsque tu es confronté à un problème concret, tu choisis le / les outils appropriés et tu assembles le tout avec ta confiture de shell (ou autre). Si tu n'utilises pas les outils "comme il faut", tu risques de faire du travail inutile, ou inutilement compliqué. Et ce sont deux sources d'erreurs potentielles, de travail supplémentaire (documentation maintenance etc...). Bref, un bon informaticien est un informaticien "parresseux", il écrit le moins possible, en préférant des outils existant, car plus un bout de code a tourné, plus il a de chance d'avoir été nettoyer de pas mal de bugs, et moins il écrit, moins il insert de bugs...

    Dans ton cas concret, il n'y a rien de dramatique, au pire tu en auras marre d'incrémenter la version de ton makefile lorsque tu passeras sous gestionnaire de version (un autre outils très vite indispensable).
    Bonjour,
    ce que tu me dis me semble bien utile, enfin ca me parle.
    Effectivement je devrais utiliser à un moment ou un autre un gestionnaire de version(vsn) mais j'ai pas encore compris comment ca marchait (c'est encore un autre problème) mais j'ai tellement ouvert de nouvelles discutions ces dernières semaines que je sais pas si ce sera bien vu si j'en poste encore un pour vsn.

    Dans l'exemple que j'ai posté ici j'ai pas du tout mis tout le code du script peut être que c'est pour ca que ca semble inutile.
    Je vais le mettre ci dessous et tu me diras si il est possible de tout traduire dans le makefile :

    Code:
    #!/bin/bash
    
    clear
    
    #on utilise les flag d'optimisation (on modifie pour ca leurs valeurs dans le Makefile)
    let "m = 1"
    while [ $m -ne 4 ]; do
    	
    	#on met les caracteristiques du systeme dans des variables
    	CPU=$( awk '/model name/ {print $5}' < /proc/cpuinfo )
    	vitesse_cpu=$( fgrep "cpu MHz" /proc/cpuinfo | awk '{print $4}' )
    
    	# au debut de chaque fichier on renseigne sur le type du systeme sous le format GNU CPU-COMPANY-SYSTEM
    	# on renseigne aussi le CPU et sa vitesse
    	#ainsi que le flag d'optimisation utiliser dans le make
    	echo "$MACHTYPE;$CPU;$vitesse_cpu; flag d'optimisation O$m" >> dense_C.csv
    	echo "$MACHTYPE;$CPU;$vitesse_cpu; flag d'optimisation O$m"  >> creuse_C.csv
    	echo "$MACHTYPE;$CPU;$vitesse_cpu; flag d'optimisation O$m"  >> dense_CPP.csv
    	echo "$MACHTYPE;$CPU;$vitesse_cpu; flag d'optimisation O$m"  >> creuse_CPP.csv
    	echo "$MACHTYPE;$CPU;$vitesse_cpu; flag d'optimisation O$m"  >> dense_F.csv
    	echo "$MACHTYPE;$CPU;$vitesse_cpu; flag d'optimisation O$m"  >> creuse_F.csv
    
    	# on ecrit le bon flag d'optimisation directement dans le makefile
    	sed -i "s/Op/O$m/g" Makefile
    
    
    	#on rempli un fichier qui va contenir les caracteristiques de la matrice
    	#le fichier sera ensuite lu dans le programme fortran
    	let "j = 1"
    	while [ $j -ne 201 ]; do
    		let "k = j*10"
    		echo -e "$k $k carree" >> test.txt
    		let "j +=1"
    	done
    
    	#executons le makefile
    	make
    	./prog_princ
    	let "i = 1"
    	while [ $i -ne 201 ]; do
    		let "n = i*10"
    		./main $n $n carree
    		./princ $n $n carree
    		let "i += 1"
    	done
    	
    
    	#on va changer l'option du flag d'optimisation
    	sed -i "s/O$m/Op/g" Makefile
    	let "m +=1"
    	
    done
    
    # bash -x ./essai.sh
    ->En plus dans ce script j'ai un problème d'affichage dans mes fichiers peut être peut-on m'aider.
    Par exemple dans dense_C.csv il m'affiches les premières informations comme suit :

    x86_64-pc-linux-gnu Celeron(R)
    Celeron(R) 2593.412
    2593.412 flag d'optimisation O1

    (à la place des espace il y a des points virgules) moi j'aurais préfère qu'il me mette toutes ces informations sur la même ligne et sans répétitions j'ai essayé de modifier le awk mais ca n'a pas marché.

    ->Sinon j'ai essayer de récupérer les information GPU (mais je n'y arrive pas je n'ai pas trouvé une commande qui me donne une information, comme pour le CPU

    Cordialement.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  13. #12
    lou_ibmix_xi

    Re : bash sed et makefile

    ce que tu me dis me semble bien utile, enfin ca me parle.
    tant mieux parce que je n'étais pas sûr d'être clair...

    Effectivement je devrais utiliser à un moment ou un autre un gestionnaire de version(vsn) mais j'ai pas encore compris comment ca marchait (c'est encore un autre problème)
    Passage obligé dès que l'on programme "pour de vrai". Mis à part l'outils utilisé (CSV, SVN ou autre GIT), c'est surtout sur l'organisation de son travail qu'il faut apprendre: faire une seule chose à la fois (correction bug ou ajout d'une fonctionnalité), répercuter les modifs sur la base et passer à l'action suivante. Ca à l'air tout simple mais il faut s'y tenir.

    Pour le reste, je crois deviner que ton but est de faire tourner plusieurs version différentes versions d'un même algo pour comparer les temps d'execution? Oui je pense la plupart est faisable par un makefile judicieux. Je ferais trois cibles pour générer les codes objets à partir du C, C++ et fortran, une cible générant le fichier d'entrée puis des cibles permettant l'exécution des programmes sur ce fichier d'entrée avec enregistrement dans tes fichiers csv. Il ne resterait qu'à changer les flags d'optimisation, là je n'est pas d'idée mais ce doit être faisable "proprement".

    (à la place des espace il y a des points virgules) moi j'aurais préfère qu'il me mette toutes ces informations sur la même ligne et sans répétitions j'ai essayé de modifier le awk mais ca n'a pas marché.
    je ne te suis pas, tu utilises la redirection >>, donc il redirigera à la fin du fichier ("append"), pour effacer l'ancien contenu, une seule redirection >. Et ta remarque par rapport à awk m'inquiète, je pense que tu n'as pas compris à quoi sert awk... Ce dernier ne fait "que" séparer les champs d'une même ligne (un champ étant des caractères entre deux séparateurs, espace par défaut, ou on peut préciser par -F), et éventuellement des actions dessus, toi en l'occurence tu demande d'afficher le 5ème champ.

    Sinon j'ai essayer de récupérer les information GPU
    Sous linux tu dois pouvoir avec lspci, je ne sais pas si c'est le plus pertinant / portable mais il n'y a pas de raison que ça ne marche pas

  14. #13
    bbdoll

    Re : bash sed et makefile

    Bonsoir,
    en fait je voudrais qu'il m'ecrive

    x86_64-pc-linux-gnu Celeron(R) 2593.412 flag d'optimisation O1

    mais il m'écrit :

    x86_64-pc-linux-gnu Celeron(R)
    Celeron(R) 2593.412
    2593.412 flag d'optimisation O1

    ok pour Ispci, je testerais ca demain.
    Merci.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  15. #14
    polo974

    Re : bash sed et makefile

    fais ça:
    vitesse_cpu=$( fgrep "cpu MHz" /proc/cpuinfo | awk '{print $4}' )
    echo $vitesse_cpu
    echo "$vitesse_cpu"
    et savoure la "finesse" du shell...

    tu peux aussi voir (pire) avec ls:
    x=$(ls /)
    echo $x
    echo "$x"
    ls /

    Ta commande te renvoies plusieurs lignes, mais si tu l'utilises dans le sh, ce dernier le transforme "parfois" en une liste séparée par des espaces.

    c'est dit quelque part dans la man...

    pour ls, c'est pire, il regarde stdout, et si c'est un terminal formate selon le nb de colonnes...

    bref un petit:
    x=(echo $a\;$b\;$c\;$d |sed 's/ /;/g')
    te remplacera les espaces et retour ligne par des ";" (à toi de remplacer x, a, b, c, ... par tes variables)

    enfin, pour info, cpu MHz dans /proc/cpuinfo donne la fréquence actuelle du (des) cpu(s), pas le max.
    ex (calme puis en "secouant" les fenêtres puis calme):
    while fgrep "cpu MHz" /proc/cpuinfo ; do echo;sleep 1; done
    cpu MHz : 1200.000
    cpu MHz : 1200.000

    cpu MHz : 2000.000
    cpu MHz : 2000.000

    cpu MHz : 1200.000
    cpu MHz : 1200.000
    au fait, en dernier, pour des scripts systèmes, utilise (toujours) en début de script:
    loclang=$LANG # si besoin...
    export LANG=C
    pour ne pas te prendre en plus des pb de traduction dans tes filtrages.
    (il est des cas où LANG n'est positionné pareil (init ou cron par ex))
    Dernière modification par polo974 ; 24/07/2012 à 10h42.
    Jusqu'ici tout va bien...

  16. #15
    bbdoll

    Re : bash sed et makefile

    Bonjour polo974,
    j'ai testé tes commandes.
    Mais elles n'arrangent pas du tout mon problème elles l'illustrent plutôt bien.
    J'ai essayé celle avec x=... mais ça m' a renvoyé une erreur.
    J'aimerais vraiment pouvoir tout mettre sur une même ligne, je ne comprend pas en fait pourquoi la ligne avec le awk s'écrit dans mon fichier sans que je ne lui propose une redirection.
    Enfin bref toujours pas trouvé de solution.
    Dernière modification par bbdoll ; 24/07/2012 à 14h47. Motif: fautes
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  17. #16
    polo974

    Re : bash sed et makefile

    bon, j'avais donné des pistes...

    mais si tu fais :
    Code:
    rm -f dense_C.csv
    
    MACHTYPE=bidule
    CPU=$( awk '/model name/ {print $5}' < /proc/cpuinfo )
    vitesse_cpu=$( fgrep "cpu MHz" /proc/cpuinfo | awk '{print $4}' )
    m=1
    
    echo $MACHTYPE";"$CPU";"$vitesse_cpu"; flag d'optimisation O"$m > dense_C.csv
    
    cat dense_C.csv
    tu dois obtenir ce que tu veux:
    Code:
    bidule;Celeron(R) Celeron(R);2500.000 1600.000; flag d'optimisation O1
    ensuite essaye la même chose en ssh à travers 3 machines...
    Jusqu'ici tout va bien...

  18. #17
    bbdoll

    Re : bash sed et makefile

    Citation Envoyé par polo974 Voir le message
    bon, j'avais donné des pistes...

    mais si tu fais :
    Code:
    rm -f dense_C.csv
    
    MACHTYPE=bidule
    CPU=$( awk '/model name/ {print $5}' < /proc/cpuinfo )
    vitesse_cpu=$( fgrep "cpu MHz" /proc/cpuinfo | awk '{print $4}' )
    m=1
    
    echo $MACHTYPE";"$CPU";"$vitesse_cpu"; flag d'optimisation O"$m > dense_C.csv
    
    cat dense_C.csv
    tu dois obtenir ce que tu veux:
    Code:
    bidule;Celeron(R) Celeron(R);2500.000 1600.000; flag d'optimisation O1
    ensuite essaye la même chose en ssh à travers 3 machines...
    Lool, merci
    J'ai pas encore testé mais merci pour ton aide.
    Bonne journée
    Dernière modification par bbdoll ; 26/07/2012 à 10h07.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  19. #18
    bbdoll

    Re : bash sed et makefile

    Bonjour,

    C'est bon l'erreur st corrigée j'ai pas trop compris où était l'erreur mais c'est bon maintenant ca marche le ` `
    J'aurais aimé savoir si j'ai envie d'essayer plusieurs compilateurs differents sur le meme programme, le choix du compilateur ce fait dans le makefile, mais comment je peux le faire varier, c'est dans le script avec un sed?
    De plus je me suis rendu compte que le make ne recompilait pas quand on changeait de flag d'op puisqu'il considérait que les main n'avait pas été changé, j'ai utilisé la "commande" .PHONY mais maintenant il ne change meme plus de compilateur il sort de la boucle et s'arrête. Tu aurais une idée de comment contourner ca? J'ai pas trop envie d'utilise run sed en fait je sais qu'il est possible de spécifier au makefile une liste de compilateur à utiliser (enfin je pense), mais j'aimerais par la suite récupérer le compilo utilisé pour l'inscrire dans le fichier.
    mais surtout aussi régler le problème de la recompilation quand on change le fichier makefile sans changer les programmes.

    Cordialement.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  20. #19
    lou_ibmix_xi

    Re : bash sed et makefile

    J'aurais aimé savoir si j'ai envie d'essayer plusieurs compilateurs differents sur le meme programme, le choix du compilateur ce fait dans le makefile, mais comment je peux le faire varier, c'est dans le script avec un sed?
    Regarde la variable "CC", et comment invoquer "make" en définissant une variable en ligne de commande

    De plus je me suis rendu compte que le make ne recompilait pas quand on changeait de flag d'op puisqu'il considérait que les main n'avait pas été changé
    C'est le rôle de "make"... Tu pourrais par exemple rajouter le "Makefile" comme prérequis de compilation des cibles ".o"

  21. #20
    bbdoll

    Re : bash sed et makefile

    Citation Envoyé par lou_ibmix_xi Voir le message
    Regarde la variable "CC", et comment invoquer "make" en définissant une variable en ligne de commande
    Oui j'ai vu mais finallement j'ai opté pour un sed, je pense que le mieux c'est que l'utilisateur futur gère tout à partir du script.
    J'ai fait un tableau de compilateur dans le script (bash) et je change avec sed le mot "compilateur" avec un des compilateur du tableau.


    Citation Envoyé par lou_ibmix_xi Voir le message
    C'est le rôle de "make"... Tu pourrais par exemple rajouter le "Makefile" comme prérequis de compilation des cibles ".o"
    En fait là j'ai rien compris, tu viens de me parler en chinois

    Sinon j'ai un autre problème que je pensais résolu mais ca ne l'est pas, polo a réussi à me faire afficher les paramètres du système en ligne mais en fait la répétition elle est toujours la.
    pourquoi quand je fait : CPU=$( fgrep "model name" /proc/cpuinfo | awk '{print $5}' ) il me met 'Celeron(R) Celeron(R)'
    et aussi dernière question (après j'espère ne plus vous enquiquiner) pourquoi quand je veux afficher le modèle avec une commande similaire :
    model_cpu =$( fgrep "model" /proc/cpuinfo | awk '{print $3}' ) il m'affiche dans le terminal commande introuvable, je ne vois pas ce qui manque.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  22. #21
    lou_ibmix_xi

    Re : bash sed et makefile

    En fait là j'ai rien compris, tu viens de me parler en chinois
    Parce que tu n'as pas lu une doc ou un tutorial expliquant à quoi sert make, et comment il marche... Je sais que maintenant, lorsqu'on achète une télé, un lecteur DVD ou n'importe quoi on ne lit plus les manuels, mais en informatique ça reste un bon reflexe, au moins pour avoir une vision globale de l'outils... un peu ce que je t'expliquais dans un de mes premiers posts...

  23. #22
    bbdoll

    Re : bash sed et makefile

    Citation Envoyé par lou_ibmix_xi Voir le message
    Parce que tu n'as pas lu une doc ou un tutorial expliquant à quoi sert make, et comment il marche
    Si je l'ai lu (sans vouloir faire preuve de mauvaise foi.
    J'y connaissais rien au makefile y a encore quelques jours, j'apprend encore et c'est sur que je ne maîtrise pas.
    Cela dit je n'ai pas voulu utiliser CC parce que j'aimerais que plus tard l'utilisateur gère tout à partir du script si il a envie de rajouter un compilo dans sa liste je préfère pas qu'il touche au makefile et je pourrais de plus plus facilement renseigner dans mon fichier le compilo que j'utilise sur le moment.
    Là mon problème c'est surtout un problème d'affichage en fait avec bash parce qu'il me fait des répétitions sur des mots et aussi à cause de la deuxieme commande sur le modele du processeur qui ne marche pas. J'ai essayer d'enlever "model" en me disant que {print $3} etait une equivalence mais ca ne marche pas et partout je vois que l'on utilise cette commande comme ca alors je ne comprend pas.

    Cordialement.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  24. #23
    lou_ibmix_xi

    Re : bash sed et makefile

    J'y connaissais rien au makefile y a encore quelques jours, j'apprend encore et c'est sur que je ne maîtrise pas.
    cibles, prérequis et recettes, ce sont les trois concepts clefs du programme "make". Sans maitriser toutes ses subtilités, il est indispensable de savoir ce qu'ils recouvrent et les relations entre eux (une cible est construite à partir d'une recette, une cible peut dépendre de prérequis qui peuvent être des cibles etc...)

    Cela dit je n'ai pas voulu utiliser CC parce que j'aimerais que plus tard l'utilisateur gère tout à partir du script si il a envie de rajouter un compilo dans sa liste je préfère pas qu'il touche au makefile et je pourrais de plus plus facilement renseigner dans mon fichier le compilo que j'utilise sur le moment.
    tu peux faire "CC?=gcc" dans le makefile, puis appeler make avec comme argument "CC=icc" ou n'importe quel autre compilateur C. Je pense qu'il y a un nom de variable prédéfini pour le compilateur FORTRAN...

    Là mon problème c'est surtout un problème d'affichage
    Je viens de comprendre pourquoi tu as un affichage en double: tu as certainement un dual-core, donc 2 lignes à /proc/cpuinfo... ajoute un "tail -1" à la fin. Pour ton autre problème, enlève l'espace entre "model_cpu" et le signe égal. Si ce n'est toujours pas ça, je me fais très souvent avoir par des caractères invisibles autour du '|' et du coup la commande après n'est pas reconnue, je suppose que c'est parce que j'ai "alt gram" enfoncée pendant que j'appuie sur espace.
    Mais, pour cette problématique, je mettrai plutôt dans le makefile
    Code:
    -include cpu.mak
    CPU?=CE_QUE_TU_VEUX_COMME_CPU_PAR_DEFAUT
    et je génèrerai le fichier "cpu.mak" de la manière suivante:
    Code:
    CPU=`grep "model name" /proc/cpuinfo | awk '{print $5}' | tail -1` && echo 'CPU='"$CPU" > cpu.mak
    Le but étant de ne pas toucher au makefile, mais plutôt de gérer des sous-fichiers ayant chacun son rôle propre
    Dernière modification par lou_ibmix_xi ; 31/07/2012 à 17h16.

  25. #24
    bbdoll

    Re : bash sed et makefile

    Bonjour,
    Merci beaucoup pour le coup de main.
    effectivement il n'y a plus de répétition et ca marche bien sauf pour model_cpu (toujours celui là) où ce qui s'affiche c'est juste le ":"
    Cordialement.

    Finallement c'est reglé model_cpu j'ai mis tail -3
    Dernière modification par bbdoll ; 01/08/2012 à 10h15.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

  26. #25
    polo974

    Re : bash sed et makefile

    Coucou, c'est re-moi....

    Bon, si ton truc te rend 'Celeron(R) Celeron(R)'
    c'est parce que tu as un dual core, et il a remplacé les retour à la ligne par des espaces donc 2 celeris (pluriel zarb).

    donc en lisant la doc, on trouve les options -c et -m de grep:
    nb de cores:
    -c donne le nombre d'occurences
    grep -c 'model name' /proc/cpuinfo
    2

    -m n'affiche que les n premières lignes (ici 1) (et autant demander ce qu'il faut)
    grep -m1 $'model\t' /proc/cpuinfo
    model : 23

    grep -m1 'model name' /proc/cpuinfo
    model name : Pentium(R) Dual-Core CPU T4200 @ 2.00GHz

    donc tout ça à la moulinette awk ou sed ou cut pour isoler les morceaux...
    ex:
    grep -m1 'model name' /proc/cpuinfo |sed 's/[^:]*: //'
    Pentium(R) Dual-Core CPU T4200 @ 2.00GHz

    au fait, il y a le copain de tail, il s'appelle head
    il a l'avantage de partir du début du fichier (bon, ici, ça fait seulement 2 lignes mais quand même...)

    (en passant, tu peux remarquer le $ dans le grep $'model\t' qui est encore un truc magique du shell...)
    Jusqu'ici tout va bien...

  27. #26
    bbdoll

    Re : bash sed et makefile

    Merci bien ca m'a aidé.
    "Ne craignez pas d' être lent, craignez seulement d' être à l' arrêt"

Discussions similaires

  1. Problème avec Makefile + SDL en C
    Par invite45ca6d89 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 05/10/2011, 20h49
  2. [Blanc] induction sauter type SED 4 N 1
    Par invite938051cc dans le forum Dépannage
    Réponses: 12
    Dernier message: 05/01/2007, 15h48
  3. Programmation C sous Windows XP : debugger, Makefile
    Par invitec392daab dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/01/2006, 10h46
  4. écrans SED ou CNT
    Par christian dans le forum Technologies
    Réponses: 5
    Dernier message: 06/12/2005, 06h36
  5. recherche documentation sur SED 1351
    Par invitebcd0049c dans le forum Électronique
    Réponses: 0
    Dernier message: 12/09/2004, 17h56