Makefile 如何使通行证';VPATH';代工

Makefile 如何使通行证';VPATH';代工,makefile,vpath,Makefile,Vpath,非常感谢您的评论。在这种情况下,实际上不使用VPATH。 我编写了一些makefile来递归地构建我的项目 根目录中的makefile的一部分如下所示 VPATH += $(shell find -type d) export VPATH #Codes to generate $(ARXIVS), i.e. the list of all local archives, #is omitted here to save spaces all : main.o $(ARXIVS) $(ARXI

非常感谢您的评论。在这种情况下,实际上不使用
VPATH

我编写了一些makefile来递归地构建我的项目

根目录中的makefile的一部分如下所示

VPATH += $(shell find -type d)
export VPATH

#Codes to generate $(ARXIVS), i.e. the list of all local archives,
#is omitted here to save spaces
all : main.o $(ARXIVS)

$(ARXIVS) :
           $(MAKE) --directory $(@D)

.PHONY : $(ARXIVS) all
如您所见,我将变量
VPATH
传递给sub-makes,以节省一些计算成本。整个系统工作正常

但是子目录中的搜索路径与根目录中的不同

我已经在sub-makes中打印了VAPTH的值,路径确实是相对于根目录的路径。因此,sub-make中的VPATH应该是错误的


但整个系统都能工作。这是怎么发生的?有人给我提建议吗。提前感谢

可能是因为甚至不需要VPATH才起作用?命令
find-type d
不起作用,因为没有指定目录。如果它在你的系统上工作,它会输出绝对路径名吗?啊,我犯了一个错误。你是对的。未使用VPATH。其次,命令
find-typed
确实有效。结果不是绝对路径名。在我的例子中,
find
命令在当前目录中搜索;在GNU中,如果没有给出作为第一个参数的值,则假定
。在BSD find中(例如,如果您使用的是MacOS),则必须显式键入
(我觉得这非常烦人)。