Makefile 如何从目标的依赖项列表中获取特定的依赖项

Makefile 如何从目标的依赖项列表中获取特定的依赖项,makefile,Makefile,假设我在Makefile中有以下规则: %.foo:%.bar%.spam%.bot echo“hello1”>$%.foo:%.bar%.spam%.bot 回声“hello1”>$< 回声hello2>$(单词2,$^) (请注意,覆盖,至少在我知道的shell中是这样,这使得整个练习毫无意义。要附加,请使用>)您所要求的与make的正常操作相反:规则应该修改冒号左侧的文件,而不是冒号右侧的文件。你在这里没有给出太多的背景,所以很难给你比这更具体的建议 对于您提出的特定问题,您可以使用以

假设我在Makefile中有以下规则:

%.foo:%.bar%.spam%.bot

echo“hello1”>$
%.foo:%.bar%.spam%.bot
回声“hello1”>$<
回声hello2>$(单词2,$^)

(请注意,
覆盖,至少在我知道的shell中是这样,这使得整个练习毫无意义。要附加,请使用
>

您所要求的与make的正常操作相反:规则应该修改冒号左侧的文件,而不是冒号右侧的文件。你在这里没有给出太多的背景,所以很难给你比这更具体的建议

对于您提出的特定问题,您可以使用以下内容:

%.foo: %.bar %.spam %.bot
    echo "hello1" > $<
    echo "hello2" > $*.spam
%.foo:%.bar%.spam%.bot
回声“hello1”>$<
回显“hello2”>$*.spam

这使用了
$*
自动变量,该变量定义为模式规则中与
%
字符匹配的文件名部分。

是的。我将Makefile用于其他目的,而不是用于编译。我找到了Beta建议的方法,但我更喜欢你的方法。它很整洁。谢谢,交替使用
$(word 2,$^)
。发件人:
%.foo: %.bar %.spam %.bot
    echo "hello1" > $<
    echo "hello2" > $*.spam