Bonjour,
j'ai écrit une règle dans un Makefile.
Voici le code :
La cible, c'est un répertoire "extract".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 MKDIR=/usr/bin/mkdir -p TAR=/usr/bin/tar -zxvf RM=/usr/bin/rm -rfv PACKAGES=packages/bash-4.0.tar.gz packages/ncurses-5.7.tar.gz packages/db-4.7.25.tar.gz packages/glibc-2.9.tar.gz extract: $(PACKAGES) $(MKDIR) $@ extract.sh mrproper: $(RM) extract
Les dépendances, ce sont des archives "*.tar.gz".
Les tâches sont de :
-créer le répertoire "extract"
-appeler le script "extract.sh"
Le script "extract.sh" doit :
-aller dans la répertoire de décompression ("extract")
-décompresser une archive .tar.gz
-sortir de ce répertoire
Et ceci pour plusieurs archives.
Voici le code de extract.sh :
Je pense qu'il est possible d'intégrer le contenu du script Bash extract.sh dans le Makefile et ainsi tout faire dans le Makefile.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #!/bin/bash TAR="/usr/bin/tar -zxvf" PACKAGES="packages/bash-4.0.tar.gz packages/ncurses-5.7.tar.gz packages/db-4.7.25.tar.gz packages/glibc-2.9.tar.gz" FOLDER=extract for each in ${PACKAGES}; do cd ${FOLDER} && ${TAR} ../${each} && cd - done
Voici le nouveau Makefile :
J'ajoute des anti-slash ("\") à la fin de certaines lignes, sinon ça ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 MKDIR=/usr/bin/mkdir -p TAR=/usr/bin/tar -zxvf RM=/usr/bin/rm -rfv PACKAGES=packages/bash-4.0.tar.gz packages/ncurses-5.7.tar.gz packages/db-4.7.25.tar.gz packages/glibc-2.9.tar.gz extract: $(PACKAGES) $(MKDIR) $@ for each in $(PACKAGES); do \ cd $@ && $(TAR) ../$(each) && cd - ;\ done
J'ai des erreurs :
D'après ces erreurs, la décompression semble se faire sur "../" au lieu de "../packages/bash-4.0.tar.gz". La variable "each" est donc vide. Je ne sais pas faire fonctionner un "for each" dans un Makefile.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 $ make /usr/bin/mkdir -p extract for each in packages/bash-4.0.tar.gz packages/ncurses-5.7.tar.gz packages/db-4.7.25.tar.gz packages/glibc-2.9.tar.gz; do \ cd extract && /usr/bin/tar -zxvf ../ && cd - ;\ done /usr/bin/tar: ../: ne peut read: est un répertoire /usr/bin/tar: Au début du ruban, fin prématurée. /usr/bin/tar: Erreur non récupérable: fin de l'exécution immédiate gzip: stdin: unexpected end of file /usr/bin/tar: Child returned status 2 /usr/bin/tar: Statut d'erreur reporté d'erreurs précédentes. /bin/sh: line 1: cd: extract: Aucun fichier ou répertoire de ce type /bin/sh: line 1: cd: extract: Aucun fichier ou répertoire de ce type /bin/sh: line 1: cd: extract: Aucun fichier ou répertoire de ce type make: *** [extract] Erreur 1
Pouvez-vous m'aider à inclure un "for each" dans mon Makefile?
Merci bien.
Partager