Makefile::= 和 ::= 赋值运算符之间的区别

Lav*_*vya 5 makefile gnu-make

Gnu Makefile 显示了两个用于立即扩展的符号,如下所示:

immediate := immediate
immediate ::= immediate
Run Code Online (Sandbox Code Playgroud)

这两者有区别吗?

参考:gnu makefile 手册第 3.7 节

Bet*_*eta 6

第 6.2 节

简单扩展的变量由使用 ':=' 或 '::=' 的行定义(请参阅设置变量)。这两种形式在 GNU make 中是等价的;然而,POSIX 标准仅描述了 '::=' 形式(2012 年在 POSIX 标准中添加了对 '::=' 的支持,因此旧版本的 make 也不接受这种形式)。

  • @Lavya:其他 make 实现也有自己的 `:=` 扩展名,具有各种含义。所以 POSIX 发明了新的语法来避免踩到任何已经存在的脚趾。有关详细信息,请参阅 http://austingroupbugs.net/view.php?id=330(以及 http://www.dwheeler.com/essays/make.html 以了解导致这种情况的出色行动)。 (2认同)
  • [bug 330](http://austingroupbugs.net/view.php?id=330) 将 `::=` 列为标记为 _Issue 8_ 并在 2011 年 12 月解决为 _Accepted As Marked_。POSIX 2013 网站仍然反映了当前第 7 期。 [Austin Group FAQ](https://www.opengroup.org/austin/faq.html#Q8) 没有提供任何关于我们希望在哪个十年看到第 8 期的线索……似乎GNU Make 手册中的文本希望它能够在 2012 年 1 月编写该文本的那一年内出现。 (2认同)