makefile中这两个命令有什么区别:
@echo "Hello World"
$(info Hello World)
Run Code Online (Sandbox Code Playgroud)
看起来,echo并info打印相同的输出,那么区别在哪里?什么时候使用哪一个?
好吧,echo是一个shell命令.所以,如果你把它放在一个偏方,外壳将被调用运行它和shell命令将生成的输出:
foo: ; @echo "Hello World"
Run Code Online (Sandbox Code Playgroud)
跑/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
Run Code Online (Sandbox Code Playgroud)
不能工作; 你必须echo在这里使用.
| 归档时间: |
|
| 查看次数: |
4412 次 |
| 最近记录: |