在Makefile中导出变量

在Makefile中导出变量,makefile,Makefile,在makefile中导出变量时遇到问题。我在/home/user/sarwan/DMAgent目录中有Makefile.mk 我有以下声明: export VZW_BASE_DIR=$(PWD) 然后我在/home/user/sarwan/DMAgent/agent目录中有另一个makefile,其中包含: include ../Makefile.mk export VZW_BASE_DIR 问题是我希望VZW_BASE_DIR是/home/user/sarwan/DMAgent,而不是将其

在makefile中导出变量时遇到问题。我在
/home/user/sarwan/DMAgent
目录中有
Makefile.mk

我有以下声明:

export VZW_BASE_DIR=$(PWD)
然后我在
/home/user/sarwan/DMAgent/agent
目录中有另一个makefile,其中包含:

include ../Makefile.mk
export VZW_BASE_DIR
问题是我希望
VZW_BASE_DIR
/home/user/sarwan/DMAgent
,而不是将其作为
/home/user/sarwan/DMAgent/agent


如何编写才能使其按预期工作?

PWD
提供您当前的工作目录,而不是当前包含的文件所在的目录。即使将文件包含在完全不同的目录中,您的工作目录也保持不变

由于您已经在对相对路径进行硬编码(请参见
include
语句),因此我认为出于其他原因继续这样做没有问题。首先,生成目录中的makefile:

export REL_DIR=..
include $(REL_DIR)/Makefile.mk
然后,在包含的makefile中:

export VZW_BASE_DIR=$(PWD)/$(REL_DIR)

这将限制您必须对一个位置进行更改的范围,即设置
REL\u DIR
。然后,它使用该变量引用包含的文件并设置基本目录。

不起作用。它说***递归变量'VZW_BASE_DIR'引用自身(最终)。停止。@Sarwan,检查更新,这将消除无限递归。这样我就不需要包含Makefile.mk文件。@Sarwan,这当然是一个选项。事实上,你已经知道include目录在哪里,所以你可以充分利用这些信息。谢谢@paxdiablo。我完全按照你说的做了。