makefile 中这两个命令有什么区别:
@echo "Hello World"
$(info Hello World)
看起来,echo
and info
打印相同的输出,那么差异在哪里呢?
以及何时使用哪一个?
Well, echo
是一个 shell 命令。因此,如果将其放入配方中,将调用 shell 来运行它,并且 shell 命令将生成输出:
foo: ; @echo "Hello World"
runs /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
here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)