私はすでに makeターゲットから別のターゲットを手動で呼び出す方法は? を見ましたが、私の質問は少し異なります。次の例を検討してください(stackoverflow.comは、表示でタブをスペースに変更しますが、編集しようとすると、タブはソースに保持されます)。
TEXENGINE=pdflatex
pdflatex:
echo the engine is $(TEXENGINE)
lualatex:
TEXENGINE=lualatex
echo Here I want to call the pdflatex rule, to check $(TEXENGINE) there!
ここで、デフォルトのターゲット(pdflatex
)を実行すると、期待される出力が得られます。
$ make pdflatex
echo the engine is pdflatex
the engine is pdflatex
しかし、ターゲットlualatex
を使用して、次のことを実行します。
make
変数TEXENGINE
をlualatex
に変更し、次にpdflatex
(それを使用する)と同じコードを呼び出します。どうすればできますか?
明らかに、私のlualatex
ルールでは、TEXENGINE
変数を変更することすらできません。これは、試してみると次のようになるためです。
$ make lualatex
TEXENGINE=lualatex
echo Here I want to call the pdflatex rule, to check pdflatex there!
Here I want to call the pdflatex rule, to check pdflatex there!
...したがって、Makefileでこのようなことが可能かどうかを本当に知りたいのです。
ターゲット固有の変数 を使用します
ターゲット固有の変数には、もう1つの特別な機能があります。ターゲット固有の変数を定義すると、その変数の値は、このターゲットのすべての前提条件やそのすべての前提条件などに対しても有効になります(これらの前提条件がその変数をその変数でオーバーライドしない限り)。独自のターゲット固有の変数値)。
TEXENGINE=pdflatex
pdflatex:
echo the engine is $(TEXENGINE)
lualatex: TEXENGINE=lualatex
lualatex: pdflatex
echo Here I want to call the pdflatex rule, to check $(TEXENGINE) there!
出力は次のとおりです。
$ make pdflatex
echo the engine is pdflatex
the engine is pdflatex
$ make lualatex
echo the engine is lualatex
the engine is lualatex
echo Here I want to call the pdflatex rule, to check lualatex there!
Here I want to call the pdflatex rule, to check lualatex there!
まあ、なんとか回避策にたどり着くことができましたが、私はそれを正確に理解していません-より多くの学習された答えが評価されます。ここでは、これらのリンクが役に立ちました:
だからここに変更された例があります-明らかに、後でルールからルールを呼び出す(前提条件としてではなく、 役職requisite)、コマンドラインで新しい変数値を指定している間は、make
を再帰的にしか呼び出すことができません。
TEXENGINE=pdflatex
pdflatex:
echo the engine is $(TEXENGINE)
lualatex:
echo Here I want to call the pdflatex rule, to check $(TEXENGINE) there!
$(MAKE) TEXENGINE=lualatex pdflatex
出力は私が望んでいるよりも少し冗長ですが、動作します:
$ make lualatex
echo Here I want to call the pdflatex rule, to check pdflatex there!
Here I want to call the pdflatex rule, to check pdflatex there!
make TEXENGINE=lualatex pdflatex
make[1]: Entering directory `/tmp'
echo the engine is lualatex
the engine is lualatex
make[1]: Leaving directory `/tmp'
...これは、純粋にコマンドラインの対話形式で求めていたものですが、最善の解決策ではないことがわかっています(以下の@JonathanWakelyのコメントを参照)