web-dev-qa-db-fra.com

boucle simple sur des fichiers dans un répertoire makefile

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
5
OrenIshShalom

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.

0
Zhwt