【发布时间】:2019-05-29 22:51:49
【问题描述】:
我可以轻松打印来自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
【问题讨论】:
-
你必须记住
$是特殊的。每当您在 makefile 配方中编写 shell 命令时,您必须转义您想要放入 shell 命令(您希望 shell 看到)的任何$。所以你的食谱应该是for f in $$(ls ${MYDIR}); do echo $$f; done