我正在优化一个非常大的项目的一些 makefile,我发现 GNU make 的vpath
命令只能做非常有限的工作。例如:
vpath %.o $(OBJPATH)
表示通过 OBJPATH 搜索路径值中的所有目标文件。这意味着/dir1/../dir2/obj1.o
和/dir3/../dir2/obj1.o
是同一个文件,但是,如果我已经制作了/dir1/../dir2/obj1.o
,当工具考虑规则时/dir3/../dir2/obj1.o
,它仍然找不到它,并且必须重新制作/dir3/../dir2/obj1.o
,即使它代表相同的文件/dir1/../dir2/obj1.o
。
我检查了 GNU make 源代码;它使用哈希表来比较文件路径字符串,因此如果字符串不同,虽然它们代表同一个文件,但仍然无法使用vpath
.
为什么不实现vpath
更强大的功能呢?