Re: Makefile & Bash

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: Makefile & Bash
Le dimanche 24 novembre, Xavier Sirvent a écrit :
> Le makefile suivant marche trés bien:
> install:
>     tar zxvf toto.tar.gz;\
>     ls -la
> Note qu'il y a une tabulation en debut de deuxième ligne
> Le principe, c'est que tu n'as en fait qu'unse seule commande séparée
> par des ;


Tu n'est pas du tout limité à une seule commande, tu peux en mettre
autant que tu veux dans une règle de Makefile. Essaye ça par exemple :

install:
    echo "Première commande"
    echo "Deuxième commande"
    echo "Troisième commande"


> Pour plus de propreté, je les mets sur des lignes séparées avec \


Ce n'est utile que si tu veux écrire _une_ commande sur plusieurs
lignes. Par exemple :

install:
    if [ -d toto ]; then \
        echo "Le répertoire toto existe déjà"; \
    else \
        tar xzfv toto.tar.gz; \
    fi
    cd toto; \
    ls -la


Ici il y a deux commandes. Le groupe if... then... else... fi est une
commande. Tu ne peux pas le séparer en plusieurs commandes car ça ne
ferait pas de sens syntaxiquement pour bash. La paire (cd toto; ls -la)
est une deuxième commande. Si tu la sépares en deux commandes, le ls se
fera dans le répertoire courant et non dans toto.

Ce qu'il faut comprendre c'est que chaque commande que lance make est
lancée dans son propre shell (via /bin/sh -c commande). C'est pour ça
que des commandes incomplètes (if sans fi par exemple) ne font pas de
sens. C'est aussi pour ça que l'effet de la commande cd se limite au
shell dans lequel cette commande a été lancée.

Edgar.

-- 
Edgar Bonet                         Tél    : 04 76 88 10 96
Laboratoire Louis Néel -- CNRS      Mobile : 06 77 19 79 39
25 av. des Martyrs, BP 166          Fax    : 04 76 88 11 91
38042 Grenoble cedex 9, France      e-mail : guilde@???