【发布时间】:2017-11-18 15:16:12
【问题描述】:
makefile中这两个命令有什么区别:
@echo "Hello World"
$(info Hello World)
看起来,echo 和 info 打印相同的输出,那么区别在哪里?
什么时候用哪一个?
【问题讨论】:
makefile中这两个命令有什么区别:
@echo "Hello World"
$(info Hello World)
看起来,echo 和 info 打印相同的输出,那么区别在哪里?
什么时候用哪一个?
【问题讨论】:
嗯,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。
【讨论】: