Относительно ответа Брюса Адамса:
Ваш ответ создает опасную путаницу.DESTDIR предназначен для установки вне корневого дерева.Это позволяет увидеть, что будет установлено в корневом дереве, если не указать DESTDIR.PREFIX - это базовый каталог, на котором основана реальная установка.
Например, PREFIX = / usr / local указывает, что final пункт назначения пакета - / usr / local.Использование DESTDIR = $ HOME установит файлы так, как если бы $ HOME был корневым каталогом (/).Если, скажем, DESTDIR, был / tmp / destdir, можно было бы увидеть, как повлияет «make install».В этом духе DESTDIR не должен никогда влиять на построенные объекты.
Сегмент make-файла, чтобы объяснить это:
install:
cp program $DESTDIR$PREFIX/bin/program
Программы должны предполагать, что PREFIX является базовым каталогомокончательный (т.е. производственный) каталог.Возможность символической ссылки на программу, установленную в DESTDIR = / что-то, только означает, что программа не имеет доступа к файлам, основанным на PREFIX, поскольку она просто не будет работать.cat (1) - это программа, которая (в простейшем виде) может запускаться откуда угодно.Вот пример, который не будет:
prog.pseudo.in:
open("@prefix@/share/prog.db")
...
prog:
sed -e "s/@prefix@/$PREFIX/" prog.pseudo.in > prog.pseudo
compile prog.pseudo
install:
cp prog $DESTDIR$PREFIX/bin/prog
cp prog.db $DESTDIR$PREFIX/share/prog.db
Если вы попытаетесь запустить prog из другого места, кроме $ PREFIX / bin / prog, prog.db никогда не будет найден, поскольку он не находится в ожидаемом месте.
Наконец, / etc / alternatives действительно не работает таким образом.Есть символические ссылки на программы, установленные в корневом дереве (например, vi -> / usr / bin / nvi, vi -> / usr / bin / vim и т. Д.).