下面的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
。
有关自动变量$@
含义的更多信息,请参阅文档的这一部分。