Makefile 巴什:PWD和CURDIR有什么区别? 我的问题

Makefile 巴什:PWD和CURDIR有什么区别? 我的问题,makefile,pwd,working-directory,Makefile,Pwd,Working Directory,我使用Makefile运行docker run目标,该目标需要当前工作目录作为其参数之一 我使用$(PWD)或$(CURDIR): build:Dockerfile 码头工人跑。。。 它们似乎产生了相同的价值。我不知道是否有细微的差别会影响我,所以我想知道它们的确切定义 我试过什么 STFW manmake 我的问题 生成文件中的$(PWD)和$(CURDIR)之间有什么区别;DR 使用CURDIR 为什么? 首先,谢谢你的支持 CURDIR 引述: CURDIR 设置为当前工作目录的绝对

我使用Makefile运行
docker run
目标,该目标需要当前工作目录作为其参数之一

我使用
$(PWD)
$(CURDIR)

build:Dockerfile
码头工人跑。。。
它们似乎产生了相同的价值。我不知道是否有细微的差别会影响我,所以我想知道它们的确切定义

我试过什么
  • STFW
  • manmake
我的问题 生成文件中的
$(PWD)
$(CURDIR)
之间有什么区别;DR 使用
CURDIR

为什么? 首先,谢谢你的支持

CURDIR
引述:

CURDIR

设置为当前工作目录的绝对路径名

为了方便起见,当GNU make启动时(在它处理了任何-C选项之后),它将变量CURDIR设置为当前工作目录的路径名。make不会再触及该值:特别注意,如果包含来自其他目录的文件,CURDIR的值不会更改。该值与在makefile中设置的值具有相同的优先级(默认情况下,环境变量CURDIR不会覆盖该值)。请注意,设置此变量不会影响make的操作(例如,它不会导致make更改其工作目录)

PWD
制造手册中未提及
PWD
。快速的
env | grep PWD
发现它是由环境设置的(在我的例子中是zsh)。GNU关于国家的说明:

PWD

Posix 1003.1-2001要求cd和pwd必须更新pwd环境变量以指向当前目录的逻辑名称,但传统Shell不支持这一点。如果一个shell实例维护PWD,但另一个子shell和不同的shell不知道PWD并执行cd,这可能会导致混淆;在这种情况下,PWD指向错误的目录。使用“pwd
”而不是“/code>$pwd”


由于
CURDIR
保证在
Make
中工作,因此
PWD
可能是从shell继承的,因此前者应该是首选。

如果您使用的是GNU Make,您可能应该:1。查看并搜索
CURDIR
make变量。2.
PWD
不是内置的make变量。它来自环境,被传递到make,就像它是make变量一样。所以,看看shell手册中的定义(例如,
manbash
)。太棒了<代码>CURDIR
它是。不知道我怎么会错过gmake链接。写下来作为答案,我很乐意接受。这不是一个真正的答案,只是链接到哪里可以找到答案。如果你愿意,可以通过总结你的发现来回答你自己。很高兴,值得称赞。变量的来源可以通过
$(origin…
:cat Makefile和&make$(info CURDIR来自$(origin CURDIR))$(info PWD来自$(origin PWD))CURDIR来自文件PWD来自环境
build: Dockerfile
        docker run ... <$(PWD) or $(CURDIR)>