Makefile 是";VPATH“;递归应用,以进一步重新定位已重新定位的目标?

Makefile 是";VPATH“;递归应用,以进一步重新定位已重新定位的目标?,makefile,gnu-make,Makefile,Gnu Make,GPATH具有特殊功能 它允许Make通过在给定目标上重复应用相同的路径来递归搜索缺少的目标 因此:all可以变成D/D/D/D/all(VPATH应用了5次!),依此类推 这种相当奇怪的(坦率地说是有缺陷的)重新定位,使Make在其目标上执行,不会发生在“正常的”VPATH上。因此,对于“常规”VPATH,Make仍将应用VAPTH一次,并且仅应用一次 但是,只要您将GPATH添加到混合中,Make就会发挥作用,通过执行完全彻底的递归vpath搜索,将丢失的目标重新定位到一个目录(尽可能深的M

GPATH
具有特殊功能

它允许Make通过在给定目标上重复应用相同的路径来递归搜索缺少的目标

因此:
all
可以变成
D/D/D/D/all
VPATH
应用了5次!),依此类推

这种相当奇怪的(坦率地说是有缺陷的)重新定位,使Make在其目标上执行,不会发生在“正常的”
VPATH
上。因此,对于“常规”
VPATH
,Make仍将应用VAPTH一次,并且仅应用一次

但是,只要您将
GPATH
添加到混合中,Make就会发挥作用,通过执行完全彻底的递归vpath搜索,将丢失的目标重新定位到一个目录(尽可能深的Make可能匹配),通过反复递归地应用相同的
vpath



例如,给定一个makefile,如:

#强制Make对不存在的文件“all”进行“目录搜索”(通过VPATH)
$(shell rm-rf“全部”)
#确保所有(vpath)文件--“D/all”、“D/D/all”等都不存在!
$(外壳rm-rf“D”)
VPATH=D
全部:
@回显“$@”
D所有:
D/D/all:
D/D/D/all:
D/D/D/D/all:
D/D/D/D/D/全部:


执行,我得到:

#单独使用“VAPTH”。(即没有“GPATH”)。
$make
D/全部
#添加'GPATH=D',使Make执行“彻底”的递归目录搜索。
#这个递归serach没有关于次数的限制,Make将在给定目标上应用相同的VPATH。
$make-f makefile-f