多个茎的makefile规则(multiple stems in makefile rule)

2019-10-18 04:37发布

我试图写一个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)做什么呢?

Answer 1:

有没有简单的方法做这样的事情。 你基本上有两种选择:你可以使用自动生成的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 > $@


文章来源: multiple stems in makefile rule