私はこのMakefileを持っています(これは単なる例であり、実際には意味がありません)
all: foobar.intermediate foobar.a
define RECIPE_THROUGH_INTERMEDIATE
cp $< $@.intermediate
mv $@.intermediate $@
endef
define RECIPE_DIRECT
cp $< $@
endef
%.a: %.c
$(RECIPE_THROUGH_INTERMEDIATE)
%.a: %.intermediate
$(RECIPE_DIRECT)
%.intermediate: %.c
$(RECIPE_DIRECT)
Makeをできるだけ「高速」にして、次のように更新したい:
>make foobar.a
から中間までレシピを実行foobar.c
するfoobar.a
しかし
>make
~から直接レシピを実行foobar.c
するfoobar.intermediate
~から直接レシピを実行foobar.intermediate
するfoobar.a
つまり、これは、foobar.a
ソース ( ) からターゲット ( ) を作成するfoobar.c
ために内部で中間を経由する必要がある一般的な状況であり、ソースから中間へ、または中間からターゲットへのいずれかを単独で移動するよりも時間がかかりますが、明示的に(内部的にではなく)中間を通過する場合、これら2つを合わせたよりも時間がかかりません。
もちろん、Make はレシピにかかる時間を知りません。
だから私は、正しいパスを作ることを示唆したい:
- ターゲットだけが必要な場合は、ソースからターゲットへの直接レシピを取得します
- ターゲットと中間の両方が必要な場合は、中間を作成し、そこからターゲットを作成します。
私は少なくとも 3.82 の GNU Make を持っていますが、パターン ステムの長さを制御することはできません。
上記の Makefile を変更して目的の動作を実現する方法はありますか?