$(shell uname -r)中的shell是什么意思

$(shell uname -r)中的shell是什么意思

我正在阅读一个 makefile,在其中找到了这个语句

 make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules

谁能解释一下什么是shell?此处正在尝试命令替换,但仅 uname -r 就足够了。为什么使用 shell 这个词以及它的含义是什么?

我已经尝试过在 shell 上执行 man 但正如我所期望的那样,它什么也没显示。我还尝试在命令行上执行 shell uname -r 。这是行不通的。我相信这个变量是在 make 中定义的。

答案1

我敢打赌这条线在 a 内Makefile,很可能是对 的递归调用make

Makefile 使用$(VAR)(或${VAR}) 表示局部变量或环境变量。

请注意与 bash 的区别,其中的$(VAR)意思是“执行 VAR 并获取结果”,因此为了在 Makefile 中实现类似的效果,使用了另一种语法

$(shell uname -r)

总结

  • $(shell uname -r)将扩展到结果uname -r
  • $(PWD)将扩展到$PWD的值

GNU Makefile 参考

相关内容