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 :

Ajout d'un echo dans un makefile


Sujet :

C

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 52
    Par défaut Ajout d'un echo dans un makefile
    Bonjour,
    Je souhaiterais ajouter une commande echo dans mon makefile, afin qu'apparaisse "c'est fait" (par exemple) une fois que j'ai fait make.
    Voici mon makefile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SUBDIRS=SRC
    all:
    	@echo
    	@echo "c'est ok"
    Et j'obtiens l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Makefile:568: warning: overriding commands for target `all'
    Makefile:144: warning: ignoring old commands for target `all'
    D'après ce que j'ai compris, comme j'ai écrit un 2ème set de commande pour "all", ça écrase le premier.

    Par contre, je ne sais pas comment procéder pour ne pas faire cette erreur.
    Merci d'avance

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    un makefile ne permet d'avoir qu'une seule liste de commande pour chaque cible.
    tu n'as pas le choix.

    Par contre, tu peux chercher le all (première cible du fichier, normalement) et ajouter ton echo.

    autre solution, utiliser la commande suivante:

    make all && echo "fait"mieux encore, déclarer une fonction shell:
    mmake(){ make $@ && echo "fait" ;}Si tu la mets dans ton bashrc, elle sera toujours définie
    mmake all invoquera make all && echo "fait"

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 52
    Par défaut
    Citation Envoyé par leternel Voir le message
    un makefile ne permet d'avoir qu'une seule liste de commande pour chaque cible.
    tu n'as pas le choix.

    Par contre, tu peux chercher le all (première cible du fichier, normalement) et ajouter ton echo.
    Je ne comprends pas ce que tu veux dire.

    Citation Envoyé par leternel Voir le message
    autre solution, utiliser la commande suivante:

    make all && echo "fait"mieux encore, déclarer une fonction shell:
    mmake(){ make $@ && echo "fait" ;}Si tu la mets dans ton bashrc, elle sera toujours définie
    mmake all invoquera make all && echo "fait"
    Je ne pense pas que cela corresponde à ce que je cherche car:
    je ne souhaite pas afficher un message juste pour afficher un message, je veux que quand les futurs utilisateurs de mon projet fassent make, il y ait un message qui apparaisse pour leur indiquer la suite des instructions.
    Merci de ton aide, en tout cas

  4. #4
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Tu peux modifier la cible principale (souvent 'all') pour lui ajouter l'instruction à la fin (et non pas la redéclarer).

    Ou alors :
    Créer une règle personnalisée, et l'appeler à la fin du all :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    all:
      ...
      ...
      ...
      make maregle
     
    maregle:
      @echo "c'est fini !"
    EDIT : et attention au "make", si tu restes sur linux, cela suffira...
    Mais si tu passes sur BSD, il te faudra utiliser "gmake" (et donc du coup définir une variable ${MAKE} qui contiendra make ou gmake en fonction de l'OS, et mettre dans le Makefile : ${MAKE} maregle)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 52
    Par défaut
    Comme j'utilise les autotools, j'ai 2 makefile (un à la racine, un dans un répertoire SRC avec mes .c). Lequel des deux suis-je censée changer?
    Jusque là, j'ai changé celui qui se trouve à la racine.

    Voici mon nouveau makefile.am:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SUBDIRS=SRC
    all:
    	make affichage
    affichage:
    	@echo
    	@echo "c'est ok"
    J'obtiens ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Makefile:568: warning: overriding commands for target `all'
    Makefile:144: warning: ignoring old commands for target `all'
    make affichage
    make[1]: Entering directory `/PROJET'
    Makefile:568: warning: overriding commands for target `all'
    Makefile:144: warning: ignoring old commands for target `all'
     
    c'est ok
    C'est bien ça que je devais faire?

  6. #6
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Alors... avec les autotools....
    Je ne sais plus... car ce sont eux qui génèrent la règle all.
    A toi de voir comment faire pour rajouter une ligne dans 'all' à la génération du Makefile, puis d'ajouter ta règle qui echo.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Dans ce cas, un bon vieux README serait d'usage, voire mieux, un fichier INSTALL.

    Sinon, tu peux ajouter une "fausse" application à compiler en dernier, qui aurait pour unique commande le echo.

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 52
    Par défaut
    Merci à tous.
    Je vais faire un README, ça sera plus simple.

  9. #9
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonjour,

    tu as mis le sujet en résolu, mais si tu postes tes Makefiles (qui ne devraient pas être longs car tu utilises les autotools) nous pourrons mieux t'indiquer où modifier quoi

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 52
    Par défaut
    Alors, voici mes fichiers:
    Makefile.am:
    SRC/Makefile.am:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bin_PROGRAMS=poursuite
    poursuite_SOURCES=ImageIO.c common.c main.c poursuite.c
    LDADD = -lm
    Et enfin configure.ac:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AC_INIT([POURSUITE], [1.0], [bug-report@adress])
    AM_INIT_AUTOMAKE([-Wall -Werror foreign])
    AC_PROG_CC
    AC_CONFIG_HEADERS([config.h])
    AC_CHECK_HEADERS([math.h stdio.h])
    AC_CONFIG_FILES([Makefile SRC/Makefile])
    AC_OUTPUT

  11. #11
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Alors un moyen de s'accrocher (terme adéquat) à une cible prédéfinie est d'utiliser soit le préfixe -local ou le préfixe -hook. Pour la cible all on peut utiliser dans le Makefile.am à la racine du projet quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    all-local:
        @echo "fin de la target all"
    Évidemment le @echo est indenté avec un caractère tabulation, cela reste un makefile dont il faut respecter la syntaxe.

    Je ne sais pas comment ça peut réagir si tu lances un parallel make ... à tester. Peut-être faut-il ajouter un
    pour s'assurer que quel que soit le build le répertoire racine sera traité en dernier.

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 52
    Par défaut
    Ca a marché, merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter des bibliothèques dans un Makefile
    Par insa59 dans le forum GTK+ avec C & C++
    Réponses: 24
    Dernier message: 11/04/2007, 18h50
  2. [JavaDOC] Ajouter notre propre javadoc dans Eclipse
    Par redzone dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 27/01/2004, 10h06
  3. Etre notifié de l'ajout d'un job dans le spooler
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 12/11/2003, 21h52
  4. [JSP] Ajout d'une tache dans le planificateur Windows
    Par PhoneKilleR dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 12/09/2003, 15h10
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12

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