Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Makefiles中打印:@echo vs$(信息)_Makefile_Gnu Make - Fatal编程技术网

在Makefiles中打印:@echo vs$(信息)

在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

makefiles中这两个命令的区别是什么:

@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