在Makefile中四个美元符号(Four Dollar signs in Makefile)

2019-08-02 05:59发布

我读的GNU制作的文档。 下面是一个例子

%.D:%.C

  @set -e; rm -f $@; \ $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$ 

我想这在C ++程序,并得到了文件列表

init3d.d init3d.d.18449 input.d input.d.18444 main.d main.d.18439

以下是我发现的,但同样在不了解文件

如果已经启用二次扩张和你想在先决条件列表中的文字美元符号,你必须真正写四篇美元符号(“$$$$”)。

我不知道这四个美元符号“$$$$”,其实是什么意思? 他们如何18449,18444或18439?

感谢致敬!

Answer 1:

如果启用使“二次扩张”, $$$$需要以产生一个$实际输出。 $通常用来扩展变量,调用make功能等$$启用了二次扩张做别的事情,但除此之外,它产生的实际$输出。

使该壳用来执行对类Unix系统的命令行解释正常$$作为扩大到外壳进程ID。 所以,无需二次膨胀启用, $$$$会变成$$在输出中,其中壳将扩大到的进程ID。

(使用shell进程ID作为后缀的努力,以保证文件名的唯一性临时文件的简单方式。)



Answer 2:

$$将被转换为$ ,但在Makefile的规则(这是壳表达式),你必须也难逃导致$使用\或使用单引号'在你的表达。

下面是一个说明它的一个例子:

DOLLAR:=$$
dollar:
    echo '$$'  >  $@
    echo "\$$" >> $@
    echo '$(DOLLAR)'  >> $@
    echo "\$(DOLLAR)" >> $@
    cat dollar


Answer 3:

18449,18444或18439的样子进程ID,所以也许一个进程ID?



文章来源: Four Dollar signs in Makefile