我试图写一个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)做什么呢?
有没有简单的方法做这样的事情。 你基本上有两种选择:你可以使用自动生成的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 > $@