我有这个 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
直接从to执行配方foobar.intermediate
foobar.intermediate
直接从to执行配方foobar.a
换句话说,这是一种常见的情况,foobar.a
从源 ( ) 生成目标 ( foobar.c
) 需要在内部通过中间体,这比单独从源到中间体或从中间体到目标需要更多时间,但是当您明确(不是在内部)通过中间时,它所花费的时间比这两者的总和要少。
当然 Make 不知道食谱需要多长时间。
所以我想提示 Make what the correct path to take:
- 当我只想要目标时,将直接配方从源带到目标
- 当我既想要目标又想要中间时,先做中间,然后再做目标。
我有 GNU Make 至少 3.82,但我无法控制模式词干的长度 - 这必须适用于任何长度的词干,包括,就像在这个例子中一样,所有词干的长度都相同。
有没有办法更改上述 Makefile 以实现所需的行为?