Я оптимизировал make-файл очень большого проекта и обнаружил, что 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
более мощные возможности?