bash
からディレクトリ内のすべてのファイルを簡単に印刷できます。
$ cat go.sh
BASEDIR=~/Downloads
MYDIR=${BASEDIR}/ddd
for f in $(ls ${MYDIR}); do echo $f; done
$ ./go.sh
m.txt
d.txt
makefile
から同様のことを行おうとすると、うまく機能しません。
$ 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
そして、これはうまくいかない別のトライアルです:
$ 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
@ Oo.oOの答え には少し問題があります。
Makefile内にfile/folderがtargetと同じ名前であり、そのtargetにいくつかの前提条件があり、そのフォルダーをループしたい場合、そのターゲットレシピが実行されます。
たとえば、build
という名前のフォルダーがあり、次のようなルールがあるとします。
build: clean server client
clean:
@echo project cleaned!
server:
@echo server built!
client:
@echo client built!
特別なbuild
フォルダーを含むフォルダーをループ処理するには、次のルールがあるとします。
MYDIR = .
ls: $(MYDIR)/*
@echo $^
結果は次のようになります。
$ make ls
project cleaned!
server built!
client built!
build Makefile
@ Mike Pylypyshyn's solution を使用することをお勧めします。 makeドキュメント によると、この場合はforeach関数の方が適しています。