【问题标题】:Why was the optional '=' added to the define directive of gnu make 4?为什么在 gnu make 4 的定义指令中添加了可选的 '='?
【发布时间】:2018-11-05 14:16:34
【问题描述】:

查看Defining multi-line variables 的 Gnu make 4.2 手册,我们看到了一个示例:

define two-lines =
echo foo
echo $(bar)
endef

还有评论

define 指令后跟在同一行上的是要定义的变量的名称和一个(可选)赋值运算符,仅此而已。

我曾多次因为包含可选的= 而被绊倒,然后在使用 Gnu make 3.81 在另一台机器上构建时遇到(通常是微妙的)问题。当然,我不应该在运行 3.81 时使用 4.2 语法!但我发现这是一个容易犯的错误,尤其是因为 URL 和 1 的内容都没有表明正在记录的版本(您必须单击 Up 2 个级别才能查看版本)。

那么,回到我的问题:为什么要引入可选的=

【问题讨论】:

    标签: gnu-make


    【解决方案1】:

    它允许您使用所有不同的赋值运算符创建宏。特别是它允许您使用:

    define foo :=
    

    得到一个简单扩展的变量,或者

    define foo ?=
    

    获取可选分配的变量等。作为其中的一部分,您可以使用(冗余)

    define foo =
    

    也是。

    【讨论】:

    • 这很有道理!谢谢@MadScientist。我假设这意味着 3.81 中的行为是使用 define 创建的所有变量都被隐式递归扩展?
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2014-07-08
    • 2012-03-16
    • 2013-11-22
    • 2018-12-22
    • 1970-01-01
    相关资源
    最近更新 更多