【问题标题】:Printing in Makefiles: @echo vs $(info )在 Makefile 中打印:@echo vs $(info)
【发布时间】:2017-11-18 15:16:12
【问题描述】:

makefile中这两个命令有什么区别:

@echo "Hello World"
$(info Hello World)

看起来,echoinfo 打印相同的输出,那么区别在哪里? 什么时候用哪一个?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    嗯,echo 是一个 shell 命令。因此,如果您将其放入配方中,则会调用一个 shell 来运行它,并且 shell 命令将生成输出:

    foo: ; @echo "Hello World"
    

    运行/bin/sh -c 'echo "Hello World"'。它只能在食谱中使用。它适用于任何版本的 make 和任何 POSIX shell。因为它调用一个 shell,你可能需要关心引用问题等(当然不是在这个简单的例子中)。

    info 是一个 GNU make 函数。它由 make 直接处理:不调用任何 shell。它可以出现在 makefile 中的任何位置,而不仅仅是在配方中。它不能移植到其他版本的make。因为没有调用 shell,所以没有引用问题。

    但是,因为info 是一个make 函数,所以在调用shell 之前它会被make 解析:这意味着它不能显示在recipe 中设置的shell 变量;例如:

    foo: ; @for i in a b c d; do $(info $$i); done
    

    无法工作;你必须在这里使用echo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-07
      • 2012-06-26
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多