makefile中这两个命令之间有什么区别:
@echo "Hello World"
$(info Hello World)
看起来,echo
和info
打印相同的输出,那么区别在哪里?
什么时候使用哪一个?
答案 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
。