在Makefile中打印:@echo vs $(info)

时间:2017-11-18 15:16:12

标签: makefile gnu-make

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

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

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

1 个答案:

答案 0 :(得分:9)

好吧,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解析:这意味着它不能显示在配方中设置的shell变量;例如:

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

不能工作;你必须在这里使用echo