Bonjour,

j'ai écrit une règle dans un Makefile.

Voici le code :

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
La cible, c'est un répertoire "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 :
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
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.

Voici le nouveau Makefile :

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'ajoute des anti-slash ("\") à la fin de certaines lignes, sinon ça ne fonctionne pas.
J'ai des erreurs :
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
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.

Pouvez-vous m'aider à inclure un "for each" dans mon Makefile?
Merci bien.