Je peux facilement imprimer tous les fichiers d'un répertoire à partir de bash
:
$ cat go.sh
BASEDIR=~/Downloads
MYDIR=${BASEDIR}/ddd
for f in $(ls ${MYDIR}); do echo $f; done
$ ./go.sh
m.txt
d.txt
Lorsque j'essaie de faire une chose similaire à partir de makefile
cela ne fonctionne pas bien:
$ cat makefile
BASEDIR = ${HOME}/Downloads
MYDIR = ${BASEDIR}/ddd
all:
for f in $(ls ${MYDIR}); do echo ${f}; done
$ make
for f in ; do echo ; done
Et voici un autre essai qui ne fonctionne pas:
$ cat makefile
BASEDIR = ${HOME}/Downloads
MYDIR = ${BASEDIR}/ddd
all:
for f in $(Shell ls ${MYDIR}); do echo ${f}; done
$ make
for f in d.txt m.txt; do echo ; done
Il y a un petit problème avec @ la réponse de Oo.oO .
S'il y a un fichier/dossier portant le même nom avec une cible dans le makefile, et que la cible a certaines conditions préalables , et si vous souhaitez parcourir ce dossier, vous obtiendrez cette recette cible en cours d'exécution.
Par exemple: si vous avez un dossier nommé build
et que vous avez une règle comme:
build: clean server client
clean:
@echo project cleaned!
server:
@echo server built!
client:
@echo client built!
Pour parcourir le dossier contenant ce dossier spécial build
, disons que vous avez les règles suivantes:
MYDIR = .
ls: $(MYDIR)/*
@echo $^
Le résultat sera:
$ make ls
project cleaned!
server built!
client built!
build Makefile
Je suggère d'utiliser @ la solution de Mike Pylypyshyn . Selon la documentation de make , la fonction foreach est plus appropriée dans ce cas.