我有一个规则something,适用于变量VAR.我也有另一个规则something-all,需要运行something,以VAR设置为每个值vars.
vars = hello world
something:
echo $(VAR)
something-all:
$(foreach VAR,$(vars),something)
Run Code Online (Sandbox Code Playgroud)
我得到了这不太有效
noob@work:~/Desktop$ make something-all
something something
make: something: No such file or directory
make: *** [something-all] Error 1
Run Code Online (Sandbox Code Playgroud)
它应该打印hello\nworld.
我曾经通过检索VAR来通过通配符规则这样做%,但感觉这是错误的方法.这看起来像这样:
vars = hello world
all: $(foreach VAR,$(vars),something-$(VAR))
something-%:
echo $*
Run Code Online (Sandbox Code Playgroud) 我想使用单个Makefile在数百个子目录中生成目标.每个子目录都是一个日期/时间戳,如下所示:20120119_153957匹配以下模式????????_??????.没有其他子目录与此模式匹配.
我想要生成一个目标????????_??????/graph.pdf.我有一个调用的脚本make_graph,它将使图形被赋予子目录名称.但我不确定如何编写一个Makefile,它将自动为所有子目录添加并以编程方式生成这些目标.
例如,代码SUBDIRS:=????????_??????似乎正确地遍历所有子目录.我可以查看这个规则:
.PHONY: print
print:
echo $(SUBDIRS)
Run Code Online (Sandbox Code Playgroud)
但是这个变量赋值
TARGETS:=$(SUBDIRS:%=%/graph.pdf)
Run Code Online (Sandbox Code Playgroud)
似乎没有做我期望的事情并分配了很多很多目标.相反,以下规则只打印一个目标.
.PHONY: print
print:
echo $(TARGETS)
Run Code Online (Sandbox Code Playgroud)
SUBDIRS应该拥有正确的子目录但TARGET只有一个文件是非常令人困惑的.