1

我正在尝试编写一个执行以下操作的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 中做这种事情的另一种方法是什么?

4

1 回答 1

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 > $@
于 2013-05-27T17:22:56.370 回答