$(@:.o=.c)在GNU Makefile中的含义是什么?



下面的Make命令在我正在审查的Makefile中:

%.o:
$(CC) $(CFLAGS) -c $(@:.o=.c) -o $@

这个Make命令中的$(@:.o=.c)变量是什么意思?

我知道$@是一个自动变量,由文档解释。然而,我仍然不能弄清楚$(@:.o=.c)是什么意思,通过搜索周围的文件。

正如@MadScientist的评论所强调的,文档的相关部分在这里:

看到:gnu.org/software/make/manual/html_node/Substitution-Refs.html

下面是该部分文档的一个片段:

6.3.1替代引用

替换引用用来替换变量的值您指定的更改。它的形式是' $(var:a=b) '(或' ${var:a=b} '),其含义是取变量的值Var,将单词末尾的每个a替换为该值中的b,并且替换结果字符串。

当我们说"在一个词的末尾"时,我们的意思是必须出现a后面跟着空格或在值的末尾取代;值中出现的其他a不变。为例子:

foo := a.o b.o l.a c.o
bar := $(foo:.o=.c)

设置' bar '为' a.c b.c l.a c.c '。

在我的示例中,如果自动变量$@表示的值是$@.o的形式,则将其转换为$@.c

有关自动变量$@含义的更多信息,请参阅文档的这一部分。

最新更新