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

Shell et commandes GNU Discussion :

[makefile] Affecter une variable dans une cible


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Par défaut [makefile] Affecter une variable dans une cible
    Bonjour à tous,

    Le makefile suivant fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LIST_FILE=$(wildcard *)
    norm:
            @echo "liste des fichiers = " $(LIST_FILE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tiresias:~/test_fortran]$ make
    liste des fichiers =  compil.ksh essai.c main.f main.o makefile run.out script.ksh subrout.f90 subrout.o test.exe
    J'aimerais le modifier légèrement pour affecter la variable LIST_FILE à l'intérieur de la cible norm (car dans un makefile que j'écrit, une des cible modifie les répertoires, et j'aimerais lister les fichiers après la modification)
    Quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    norm:
            LIST_FILE=$(wildcard *)
            @echo "liste des fichiers = " $(LIST_FILE)
    Qui malheureusement cela donne une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tiresias:~/test_fortran]$ make
    LIST_FILE=compil.ksh essai.c main.f main.o makefile run.out script.ksh subrout.f90 subrout.o test.exe
    /bin/sh: essai.c: command not found
    make: *** [norm] Error 127
    Je me suis un peu perdu dans la doc. Les makefile c'est assez cryptique je trouve :/

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour

    A priori, ça n'a rien à voir avec le makefile.
    Il affecte 'LIST_FILE=compil.ksh' puis cherche à exécuter 'essai.c' qui n'est évidemment pas un executable. D'où l'erreur. Comme si la commande était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ a=1 echo toto
    toto
    $
    Essaie de protéger la chaîne de caractères par '' ou "".
    Je ne comprends pas l'intérêt de cette lista hétéroclite.

  3. #3
    Membre très actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Par défaut
    pour être plus précis:

    J'ai un répertoire dans lequel je vais dans un premier temps générer les fichiers .py d'une interface graphique à partir de fichiers .ui

    Dans un deuxième temps je met à jour les fichiers de translation à partir des .py générés d'où l'utilité de ne lister le répertoire que lorsque les fichiers ont déjà été générés.

    La liste que je présente ici c'est juste pour tester.

    J'ai tenté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [tiresias:~/test_fortran]$ cat makefile
    norm:
            LIST_FILE="$(wildcard *)"
            @echo "liste des fichiers = $(LIST_FILE)"
    [tiresias:~/test_fortran]$ make
    LIST_FILE="compil.ksh essai.c main.f main.o makefile run.out script.ksh subrout.f90 subrout.o test.exe"
    liste des fichiers =
    ou avec des simples quotes aussi, sans plus de succès :/

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Là encore, je ne comprends pas. $() acceuille une commande. LIST_FILE n'est pas une commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @echo "liste des fichiers = $LIST_FILE"

  5. #5
    Membre très actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Par défaut
    Non je ne crois pas, dans les makefile il faut mettre des parenthèses:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [tiresias:~/test_fortran]$ cat makefile
    LIST_FILE="$(wildcard *)"
    norm:
            @echo "liste des fichiers = $LIST_FILE"
    [tiresias:~/test_fortran]$ make
    liste des fichiers = IST_FILE
    Il marche chez toi ce makefile?

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    De toute évidence, il ne prend que la première lettre de la variable. Il faut la mettre entre accolades et non entre parenthèses. Comme en Bash. Testé et approuvé.

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

Discussions similaires

  1. affectation du resultat d'une reqûete dans une variable
    Par etoile_de_vie dans le forum PL/SQL
    Réponses: 7
    Dernier message: 06/11/2009, 17h44
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. affecter la valeur d'une requete dans une variable (VB6)
    Par josémaria dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/03/2007, 14h19
  4. Réponses: 1
    Dernier message: 15/02/2007, 00h24
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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