首页 > 解决方案 > 简单循环某个目录makefile中的文件

问题描述

我可以轻松地从以下位置打印某个目录中的所有文件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

标签: bashmakefilels

解决方案


也许你可以纯粹用 Makefile 的方式来做?

MYDIR = .
list: $(MYDIR)/*
        @echo $^

您仍然可以像这样从 Makefile 运行命令

MYDIR = .
list: $(MYDIR)/*
        for file in $^ ; do \
                echo "Hello" $${file} ; \
        done

如果我是你,我宁愿不混合 Makefile 和基于$(shell ...). 我宁愿将目录名称传递给某个脚本并在那里运行循环 - 在脚本内部。


推荐阅读