我在一个 makefile 中看到了以下 GCC 命令选项:
... -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -o "$@" "$<"
如何解释它?
我已经搜索了makefile文档,但迄今为止没有找到。
(这不仅仅涉及自动变量)
感谢 @Quentin 提供的线索,我找到了它!
它被称为 替换引用
一些引用:
替换引用是一种将变量值与您指定的更改进行替换的方法。它采用‘$(var:a=b)
’(或‘${var:a=b}
’)的形式,其含义是获取变量var的值,在该值中将每个以a结尾的单词替换为b,并替换生成的字符串。当我们说“在单词末尾”时,我们的意思是a必须出现在空格后面或值的末尾才能被替换;值中的其他a出现不会受到影响。例如:foo := a.o b.o c.o
,bar := $(foo:.o=.c)
将‘bar
’设置为‘a.c b.c c.c
’。有关详细信息,请参见设置变量。替换引用实际上是使用patsubst扩展函数的缩写(请参见字符串替换和分析功能)。我们提供替换引用以及patsubst以与其他make实现兼容。... -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -o "$@" "$<"
是:
使用gcc编译第一个先决条件文件(
$<
)并生成以当前规则目标名称(%@
)命名的输出文件。顺便生成一个名为*.d
的makefile,其中包含一个规则来描述当前规则目标的依赖关系。并将生成的*.d
makefile中规则目标的名称从*.o
更改为*.d
。