如何在make中进行vpath匹配后得到绝对路径?

Hon*_*nza 2 filenames makefile gnu-make vpath

我有一个makefile,取决于一些属性设置vpath并生成一个源文件列表到一个变量.我需要在不编译任何内容的情况下运行makefile(编译实际上是由不同的makefile处理),并且根据vpath设置查看文件名匹配的真实文件.

小智 6

选项1:让make进行路径搜索:

.PHONY: whichfiles
whichfiles: $(LIST_OF_SOURCE_FILES)
    @echo $+
Run Code Online (Sandbox Code Playgroud)

选项2:使用$(通配符)模拟路径搜索:

.PHONY: whichfiles
whichfiles:
    @echo $(foreach f,$(LIST_OF_SOURCE_FILES),$(firstword $(wildcard $(VPATH:%=%/$f)) not-found:$f))
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,"make whichfiles"将打印匹配文件列表.

如果找不到某些文件,则选项1将失败,并且"无规则"报告无法找到的第一个文件.选项2将为每个丢失的文件打印"not-found:".