makefile规则中的多个词干

时间:2013-05-27 17:04:35

标签: makefile dependencies

我正在尝试编写一个类似于以下内容的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中做这种事情的另一种方法是什么?

1 个答案:

答案 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 > $@