首页 > 解决方案 > Makefile 中的这些行是什么意思?

问题描述

我必须快速了解 Makefile,以了解我遇到的一些问题。我遇到了这些问题,我想确保我正确理解了它们的使用。

cp $< $@
sed -i -e 's#{{DEPLOY}}#https://example.com/#g' $@

说清楚,我知道sed在这里被用来进行(全局?)字符串替换,但是 bash 特殊字符的使用使这可能比它应该的更令人困惑。

希望能解释一下上面两行实际上在做什么。

标签: bashmakefile

解决方案


它们是GNU Make 自动变量

$@ 规则目标的文件名。如果目标是存档成员,则“$@”是存档文件的名称。在具有多个目标的模式规则中(请参阅模式规则简介),“$@”是导致规则配方运行的目标的名称。

$<第一个先决条件的名称。如果目标从隐式规则中获得其配方,这将是隐式规则添加的第一个先决条件(请参阅隐式规则)。

看看目标和先决条件是什么


sed -i -e 's#{{DEPLOY}}#https://example.com/#g' $@

{{DEPLOY}}https://example.com/in替换所有出现的$@


综上所述,一个更简单、更健壮的版本

cp $< $@
sed -i -e 's#{{DEPLOY}}#https://example.com/#g' $@

是:

sed -e 's#{{DEPLOY}}#https://example.com/#g' $< > $@ 

推荐阅读