在Makefiles中打印:@echo vs$(信息)
makefiles中这两个命令的区别是什么:在Makefiles中打印:@echo vs$(信息),makefile,gnu-make,Makefile,Gnu Make,makefiles中这两个命令的区别是什么: @echo "Hello World" $(info Hello World) 看起来,echo和info打印相同的输出,那么区别在哪里呢? 什么时候使用哪一个?嗯,echo是一个shell命令。因此,如果将其放入配方中,将调用一个shell来运行它,shell命令将生成输出: foo: ; @echo "Hello World" 运行/bin/sh-c'echo“Hello World”。它只能在配方中使用。它可以在make
@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直接处理:不调用shell。它可以出现在makefile的任何地方,而不仅仅是配方中。它不可移植到make的其他版本。因为没有调用shell,所以不存在引用问题
但是,由于info
是make函数,因此在调用shell之前,make会对其进行解析:这意味着它不能显示在配方中设置的shell变量;例如:
foo: ; @for i in a b c d; do $(info $$i); done
不能工作;您必须在此处使用echo