Поиск в текущем каталоге последним при поиске зависимостей с использованием GNU make и VPATH

#makefile #vpath

#makefile #vpath

Вопрос:

Это проблема с разрешением зависимостей GNU Make.

Моя проблема в том, что я копирую исходные файлы с удаленного файлового сервера на обычный диск (что ускоряет процесс сборки на 50%). Если копирование файла завершается неудачей, я хочу использовать исходные файлы с файлового сервера, в противном случае я хочу прочитать их с чистого диска.

Я пытался использовать механизм vpath, но проблема в том, что, насколько я понимаю, make по умолчанию начнет поиск исходных файлов в текущем каталоге и, только если ему не удастся найти там файлы, поищите в каталогах, перечисленных с помощью vpath.

Возможно ли, чтобы make сначала просматривал каталоги vpath, прежде чем искать в текущем каталоге? Или, возможно, искать только в каталогах vpath (и явно и динамически добавлять текущий каталог в vpath)?

Единственный способ, который я могу придумать, это временно изменить каталог, чтобы make всегда не мог найти исходные файлы.

Комментарии:

1. Есть ли особая причина, по которой вы должны разрешать ненадежным версиям исходных файлов находиться в текущем каталоге?

2. Исходные файлы будут идентичны в двух каталогах, но я хочу использовать копию на чистом диске из-за лучшей производительности (сборка занимает несколько часов).

3. Я понимаю это, но я не вижу, какое это имеет отношение к моему вопросу. Есть ли какие-либо исходные файлы в текущем каталоге?

Ответ №1:

Посмотрите на путь к исходному каталогу на сервере. Предположим, что это «/server/somewhere/src/». И предположим, что у вас нет каталога «src» в текущем каталоге (если есть, нам просто нужно настроить этот метод). Просто убедитесь, что путь к исходному каталогу на жестком диске заканчивается на «/src/», например «/scratch/среда/src/». Затем вы можете сделать это:

 SCRATCH_PATH = /scratch/wednesday/
SERVER_PATH = /server/someplace/

VPATH = $(SCRATCH_PATH) $(SERVER_PATH)

%.o: src/%.cc
    $(CC) blah blah blah