如何将当前目录捕获为make变量中的绝对路径名?

Wil*_*mKF 29 makefile gnu-make

我想在GNUmake文件运行期间将当前目录放入make变量中.

这样做的语法是什么?像这样的东西?

DIR := $(PWD)
Run Code Online (Sandbox Code Playgroud)

小智 57

嗯,不,$PWD有时在你的环境中定义,因此由make继承,但通常不是.你需要$CURDIR.

DIR := ${CURDIR}
Run Code Online (Sandbox Code Playgroud)

  • Doc:https://www.gnu.org/software/make/manual/html_node/Recursion.html#Recursion注意:不是POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html In特别是,`PWD`没有得到关于`make -C`的递归调用的更新. (3认同)
  • 供参考:***这是 Windows 友好的***,可以在 cmd、git bash、powershell、conemu 中工作...与 `$$PWD` 相比,它在任何地方都不适合我(上下文:我们的 makefile 正在执行 ` docker run -v $$PWD:/opt ...` 并且 docker 抱怨非描述性的“挂载被拒绝:源路径“C:/Users/.../somedir;C”不存在并且是Docker 不知道`) (3认同)

Swi*_*ank 5

如果您有一个 makefile,包括另一个位于不同目录中的 makefile,PWD并且CURDIR没有为子 makefile 更新。如果第二个 makefile 需要知道它在哪里,下面会告诉你。

$(dir $(realpath $(lastword $(MAKEFILE_LIST))))
Run Code Online (Sandbox Code Playgroud)