6

次のファイルが makefile と同じディレクトリにあるとします。

01.1.dot
01.2.dot
02.1.dot
03.1.dot
03.2.dot
03.3.dot

つまり、[0-9][0-9].[0-9].dot という形式のファイルがあることを意味します。

さらに、メイクファイルには次のターゲットが含まれています。

%.dot.tex: %.dot
    dot2tex <...>

ここで、[0-9][0-9].tex の形式のファイルに依存するターゲットを作成したいと思います。[0-9][0-9].* の形式のすべてのファイルにも依存する必要があります。 .dot.tex、最初の 2 桁が一致するように。たとえば、 、、およびmake 03.pdfに依存する必要があります。私は次のことを思いつきました:03.tex03.1.dot.tex03.2.dot.tex03.3.dot.tex

%.pdf: %.tex $(addsuffix .tex,$(wildcard %.*.dot))
        @echo $?
        pdflatex <...>

ただし、パーセントはワイルドカード関数では評価されません。誰かがこれを解決する方法を知っていますか?

4

1 に答える 1

3

関数はパターン マッチング ルールの前に適用されるため、glob では % を使用できません。

おそらくもっと良い解決策がありますが、私は次のことを思いつきました:

.dep-%.pdf: %.tex
    @bash -c 'shopt -s nullglob; for x in $*.*.dot; do \
      echo "$*.pdf: $$x.tex"; \
    done' > $@
PDFS := $(patsubst %.tex,%.pdf,$(wildcard [0-9][0-9].tex))
include $(patsubst %,.dep-%,$(PDFS))
%.pdf: %.tex | .dep-%.pdf

X.tex ファイルを変更せずに X.*.dot ファイルを追加または作成しない限り、これは機能するはずです。

于 2013-11-06T22:16:51.860 に答える