5

X.pdfターゲットがで、前提条件が であると仮定して、makefile ターゲットの前提条件で % 記号を再利用する方法を学びたいと思いX/X.texます。

詳しく説明すると、現在、次のようなメイクファイルがあります。

all: foo.pdf

%.pdf: %.tex
    pdflatex $*.tex

さらにファイルfoo.texがあり、入力makeするとfoo.pdf、実行して作成されますpdflatex foo.tex

現在、制御できないさまざまな理由により、ディレクトリ構造が変更されました。

my_dir
|- Makefile
|- foo
   |- foo.tex

X.pdfMakefile を変更して、make を試みるときにファイルを検索するようにしたいと考えていますX/X.tex

私は次のことを試しました (私は '%/%.tex' を入れて、 を探すように指示しましたfoo/foo.tex):

all: foo.pdf

%.pdf: %/%.tex
    pdflatex $*/$*.tex

ただし、これにより次の結果が得られます。

No rule to make target `foo.pdf', needed by `all'. Stop.

そう%.pdf: $*/$*.texです。

を に変更する%/%.texfoo/%.tex、期待どおりに動作しますが、そこにハードコーディングしたくありませんfoo。将来的には、andall: foo.pdf bar.pdfを探す必要があるからです。foo/foo.texbar/bar.tex

私は Makefiles にかなり慣れていません (私のニーズに合わせて他の人を変更することに限定された経験)、絶対に基本的なもの以上のことをしたことがないので、誰かが私に役立つポインターを与えることができれば (私は本当に知りません) Makefile のドキュメントで検索する単語 - 有望に見えたのは%とだけでし$*た。これは機能しませんでした)。

4

1 に答える 1

2

VPATH を使用して、make が検索するディレクトリのリストを指定できます。

メイクファイルの例:

# Find all tex files
tex := $(shell find -iname '*.tex')

# Make targets out of them
PDFS := $(notdir $(tex:%.tex=%.pdf))
# specify search folder
VPATH := $(dir $(tex))

all : $(PDFS)

%.pdf : %.tex
        pdflatex $<

または、vpath (小文字) を使用することをお勧めします。

vpath %.tex $(dir $(tex))

これらのディレクトリ内の .tex ファイルのみを検索します。

于 2012-04-05T08:09:57.577 に答える