hoge diary - March 19, 2005

[プログラミング] GNU make の単純展開変数

TEXINPUTS を自動的に設定してタイプセットを行う Makefile を書こうとして,次のように書くと失敗します.

% cat Makefile
TEXINPUTS=$(TEXINPUTS)./eps:

all: foo.tex
        platex foo.tex
% make
platex foo.tex
make: *** Recursive variable `TEXINPUTS' references itself (eventually).  Stop.

この原因は,make は変数(マクロ)の展開を,それが実際に使用された時点で行うためです.

変数に値を付け加えたい場合は,"=" の代わりに ":=" を使用して単純展開変数を定義します.

% cat Makefile
TEXINPUTS := $(TEXINPUTS)./eps:

all: foo.tex
        platex foo.tex
% make
platex foo.tex
(snip)
%

この場合,変数が定義された時点で 1 度だけ展開されます.ただし GNU make でないと使えません.

コメント

名前(何でも可):

テキスト(http:// を含む内容は投稿できません):

トラックバック

トラックバック URI: https://www.pakunet.jp/hoge/trackback/2005031902

トラックバックはありません.


Valid XHTML 1.1! Valid CSS!
© 2004-2009 ぱくちゃん.
Last modified: Thu Nov 01 01:16:33 JST 2007