Shell ls命令的Makefile循环结果

Shell ls命令的Makefile循环结果,shell,makefile,Shell,Makefile,我有一个文本文件列表,当执行以下命令时: ls *.txt 将导致如下结果: foo.txt bar.txt baz.txt File: foo.txt File: bar.txt File: baz.txt 现在,如果我想让输出类似于: foo.txt bar.txt baz.txt File: foo.txt File: bar.txt File: baz.txt 如何在Makefile中实现这一点 我一直在努力: txtfiles = $$(ls *.txt) list: $(

我有一个文本文件列表,当执行以下命令时:

ls *.txt
将导致如下结果:

foo.txt bar.txt baz.txt
File: foo.txt
File: bar.txt
File: baz.txt
现在,如果我想让输出类似于:

foo.txt bar.txt baz.txt
File: foo.txt
File: bar.txt
File: baz.txt
如何在Makefile中实现这一点

我一直在努力:

txtfiles = $$(ls *.txt)

list: $(txtfiles)

$(txtfiles):
    echo "File:" $@
但在使用make list运行时,结果是:

File: $
File: $
我想尝试使用占位符%来实现这一点,但不确定如何做到这一点

注意:我想我可以用$wildcard*.txt代替$$ls*.txt吗


好吧,我想出来了:

my_list = $(addsuffix .dep, $(wildcard *.txt))
print_list: $(my_list)
%.dep: %
    @echo "Text File:" $<
使用make print_list运行它以返回预期结果

注意:我想我可以用$wildcard*.txt代替$$ls*.txt吗

你必须这么做


另外,在$txtfiles之前添加.PHONY:$txtfiles:rule来创建一个。如果您想维护一个可读的代码,应该避免这种方法。虽然我根据上面的答案找到了一个解决方案,但我会将其标记为答案,因为它比我的版本更干净