2010-03-23 8 views

Répondre

24

Tout comme d'appeler toute autre commande d'un makefile:

target: prerequisites 
    shell_script arg1 arg2 arg3 

En ce qui concerne votre autre explication:

.PHONY: do_script 

do_script: 
    shell_script arg1 arg2 arg3 

prerequisites: do_script 

target: prerequisites 
+0

mais j'ai besoin d'exécuter le script avant les conditions préalables –

+0

@ Matthew, puis votre makefile est mal configuré. Créez une nouvelle cible '.PHONY' dont vos prérequis dépendent et exécutez le script dans cette cible. –

+0

Édité avec plus pour votre cas. –

5

Chacune des actions de la règle de makefile est une commande qui sera exécutée dans un sous-couche. Vous devez vous assurer que chaque commande est indépendante, puisque chacun sera exécuté dans un sous-shell distinct.

Pour cette raison, vous verrez souvent des sauts de ligne se sont échappés lorsque l'auteur veut plusieurs commandes à exécuter dans le même sous-shell:

targetfoo: 
     command_the_first foo bar baz 
     command_the_second wibble wobble warble 
     command_the_third which is rather too long \ 
      to fit on a single line so \ 
      intervening line breaks are escaped 
     command_the_fourth spam eggs beans 
0

Peut-être pas la « bonne » façon de le faire comme les réponses déjà fournies , mais je suis tombé sur cette question parce que je voulais que mon makefile exécute un script que j'ai écrit pour générer un fichier d'en-tête qui fournirait la version d'un ensemble de logiciels. J'ai un certain nombre de cibles dans ce paquet, et je ne voulais pas ajouter un nouveau prérequis à tous. Mettre cela vers le début de mon makefile a fonctionné pour moi

$(shell ./genVer.sh) 

qui dit make pour exécuter simplement une commande shell. ./genVer.sh est le chemin (même répertoire que le makefile) et le nom de mon script à exécuter. Cela fonctionne quelle que soit la cible que je spécifie (y compris clean, ce qui est l'inconvénient, mais finalement pas une affaire énorme pour moi).

Questions connexes