“VPATH”是否以递归方式应用,以进一步重新定位已经重新定位的目标?

时间:2015-08-28 07:47:58

标签: makefile gnu-make

GPATH有一个特殊功能。

它允许Make以递归方式搜索丢失的目标,通过 重复 在给定目标上应用相同的VPATH

因此:all可以转为D/D/D/D/D/allVPATH应用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及以上)。

0 个答案:

没有答案