GPATH
有一个特殊功能。
它允许Make以递归方式搜索丢失的目标,通过 重复 在给定目标上应用相同的VPATH
。
因此:all
可以转为D/D/D/D/D/all
(VPATH
应用5次!),依此类推。
这个相当离奇 - 并且坦率地说 - 重新定位,Make对其目标执行, 不 发生在“正常”VPATH
。因此,对于“常规”VPATH
,Make仍然会应用VAPTH 一次 ,而 只应用
但是,只要你将GPATH
添加到混合中,Make就会一路走来,通过完全详尽的递归 - vpath搜索,将丢失的目标重新定位到一个目录 - 就像make一样深可以匹配 - 通过反复和递归地再次应用相同的VPATH
。
例如,给定一个makefile,例如:
# Force Make, to do a "directory-search" (via VPATH), for the non-existent file 'all'
$(shell rm -rf 'all')
# Make sure, that all of the (vpath) files - 'D/all', 'D/D/all' and so on - DO NOT exist!
$(shell rm -rf 'D')
VPATH = D
all :
@echo '$@'
D/all :
D/D/all :
D/D/D/all :
D/D/D/D/all :
D/D/D/D/D/all :
执行,我得到:
# 'VAPTH' alone. (i.e. no 'GPATH').
$ make
D/all
# Adding 'GPATH = D', causes Make to do an "exhaustive" recursive-directory-search.
# This recursive serach, has no limits, regarding the number of times, Make will apply the same VPATH on a given target.
$ make -f makefile -f <(echo 'GPATH = D')
D/D/D/D/D/all
错误或功能?你怎么看?
(版本说明:3.82及以上)。