【发布时间】:2021-09-18 05:33:54
【问题描述】:
我正在尝试根据 Makefile 中的实例化目标来匹配依赖项。
我希望这段代码可以工作,但它没有。
a b: $@.test
*.test:
echo $@
我希望make a 输出a.test。
另外,如何访问* 部分并简单地输出a?
【问题讨论】:
标签: makefile
我正在尝试根据 Makefile 中的实例化目标来匹配依赖项。
我希望这段代码可以工作,但它没有。
a b: $@.test
*.test:
echo $@
我希望make a 输出a.test。
另外,如何访问* 部分并简单地输出a?
【问题讨论】:
标签: makefile
您为什么希望它起作用?
首先,您不能在像a b: $@.test 这样的先决条件列表中使用$@;自动变量是only defined inside recipes,不在先决条件列表中。所以它是空的。
其次,当 make 解析你的 makefile 时,它会扩展 *.test 通过查找磁盘上与该模式匹配的所有文件,并且可能没有任何文件(因为你还没有构建它们)所以这将扩展到空字符串。
基本上你的makefile和你写的一样:
a b: .test
:
echo $@
如果您希望make a 输出a.test,您可以使用static-pattern rules 来执行此操作,如下所示:
a b : % : %.test
%.test:
echo $@
如果您只想要匹配模式use $* 而不是$@ 的部分。
【讨论】: