我的问题
我使用 Makefile 来运行docker run
target,需要当前工作目录作为其参数之一。
我使用任一$(PWD)
or $(CURDIR)
:
build: Dockerfile
docker run ... <$(PWD) or $(CURDIR)>
他们似乎正在产生相同的价值。我不知道是否有一些细微的差异会在以后困扰我,所以我想知道它们各自的确切定义。
我尝试过什么
我的问题
有什么区别$(PWD)
and $(CURDIR)
在 Makefile 中?
TL;DR
Use CURDIR
.
Why?
首先,谢谢雷诺·帕卡莱特 https://stackoverflow.com/users/1773798/renaud-pacalet for 他的评论 https://stackoverflow.com/questions/52437728/bash-what-is-the-difference-between-pwd-and-curdir?noredirect=1#comment91819615_52437728.
CURDIR
引用GNU 制作手册 https://www.gnu.org/software/make/manual/make.html#Quick-Reference:
CURDIR
设置为当前工作目录的绝对路径名。
为了方便起见,当 GNU make 启动时(在处理任何 -C 选项之后),它将变量 CURDIR 设置为当前工作目录的路径名。 make 再也不会触及该值:特别注意,如果包含其他目录中的文件,则 CURDIR 的值不会更改。该值与在 makefile 中设置的值具有相同的优先级(默认情况下,环境变量 CURDIR 不会覆盖该值)。请注意,设置此变量对 make 的操作没有影响(例如,它不会导致 make 更改其工作目录)。
PWD
没有参考PWD
在制作手册中。一个快速env | grep PWD
发现它是由环境设置的(在我的例子中是 zsh)。 GNU 的注释特殊的 shell 变量 https://www.gnu.org/software/autoconf/manual/autoconf-2.61/html_node/Special-Shell-Variables.html声明:
PWD
Posix 1003.1-2001 要求 cd 和 pwd 必须更新 PWD 环境变量以指向当前目录的逻辑名称,但传统 shell 不支持这一点。如果一个 shell 实例维护 PWD,但附属的不同 shell 不知道 PWD 并执行 cd,则这可能会导致混乱;在这种情况下,PWD 指向错误的目录。使用``密码' rather than
$PWD'.
Since CURDIR
保证可以工作Make
in PWD
might是从shell继承的,应该优先选择前者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)