Arhn - архитектура программирования

Почему пути сопоставления vpath в GNU make соответствуют путям как строкам, а не путям?

Я оптимизирую 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 с более мощными возможностями?

27.04.2012

  • Это очень неясно. Как мы должны анализировать, когда правила инструментального мышления для /dir3/../dir2/obj1.o? Возможно, если вы покажете нам правила, мы сможем помочь. 27.04.2012

Ответы:


1

Re:

[GNU Make] использует хэш-таблицу для сравнения строк пути к файлу, поэтому, если строки отличаются, хотя они и обозначают один и тот же файл, их все равно нельзя сопоставить с помощью vpath.

Make делает примерно то, что нужно. Чтобы определить, являются ли два объекта одинаковыми, необходимо полагаться на уникальные идентификаторы в файловой системе (например, номера инодов), которые зависят от ОС и файловой системы.

Почему вы используете два разных пути для ссылки на одну и ту же цель или предпосылку? Возможно, то, что вы делаете в своем Makefile, хуже, чем Make, полагающееся на равенство строк для сравнения путей.

Кроме того, вы можете что-то не так понять. Директива vpath и переменная VPATH связаны с поиском необходимых файлов.

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

Это связано с тем, что нельзя предполагать, что объектные файлы существуют, и вы не ищете то, что может не существовать. Когда вы делаете чистую сборку, объектных файлов там нет. Ваш Makefile должен знать их точные имена. Это предпосылки, которые могут варьироваться. Например, вы знаете, что хотите собрать foo.o (который может уже существовать из предыдущей сборки, а может и не существовать). Что вам не обязательно знать, так это исходный файл, из которого построен foo.o. Это libfoo/foo.c или utils/foo.c? Это проблема, которую решает vpath: он будет искать эти места и найдет foo.c, аналогично тому, как PATH помогает вашей оболочке найти программу foo в /bin или /usr/bin и т. д.

VPATH/vpath являются чем-то вроде хака для написания быстрых и грязных make-файлов для небольших проектов, которые не масштабируются до большой конфигурации. Нет смысла пытаться их улучшить.

27.04.2012
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..