1

次のようなメイクファイルを作成しようとしています。

%-foo-(k).out : %-foo-(k-1).out
    # do something, e.g.
    cat $< $@

つまり、任意の語幹を持ち、次に-foo-、整数、 が続くファイルがあります.out。各ファイルは同じ名前のファイルに依存し、整数は 1 つ小さいものになります。

たとえば、ファイルblah/bleh-foo-1.outが存在する場合、

make blah/bleh-foo-2.out

動作します。

そのようなことがあれば、複数のステムでこれを行うことができます... (gnu) make でこの種のことを行う別の方法は何ですか?

4

1 に答える 1

3

このようなことを行う簡単な方法はありません。基本的に 2 つのオプションがあります。自動生成された makefile を使用するか、$(eval ...). 私にとっては、自動生成されたメイクファイルの方が簡単なので、解決策は次のとおりです。

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 に答える