我正在尝试编写一个类似于以下内容的makefile:
%-foo-(k).out : %-foo-(k-1).out
# do something, e.g.
cat $< $@
即。有任意词干的文件,然后是-foo-
,然后是整数,后跟.out
。每个文件都取决于具有相同名称的文件,其中整数一个较小。
例如,如果文件blah/bleh-foo-1.out
存在,那么
make blah/bleh-foo-2.out
会起作用。
如果有这样的事情我可以用多个词干来做这个...在(gnu)make中做这种事情的另一种方法是什么?
答案 0 :(得分:3)
没有简单的方法可以做这样的事情。您基本上有两个选项:您可以使用自动生成的makefile,也可以使用$(eval ...)
。对我来说,自动生成的makefile更容易,所以这是一个解决方案:
SOURCELIST = blah/bleh-foo-1.out
all:
-include generated.mk
generated.mk: Makefile
for f in $(SOURCELIST); do \
n=`echo "$$f" | sed -n 's/.*-\([0-9]*\)\.out$/\1/p'`; \
echo "$${f%-foo-[0-9]*.out}-foo-`expr $$n + 1`.out: $$f ; cat $$< > $$@"; \
done > $@