#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