make install
делает все, что хочет автор Makefile
. Как правило, к этому моменту уже слишком поздно менять каталог установки, как это часто известно ранее, во время сборки, поэтому на файлы справки и файлы конфигурации можно ссылаться с правильными путями.
Многие проекты используют GNU Autotools, чтобы попытаться улучшить их переносимость между аппаратными и операционными системами. (Различные варианты Unix используют немного разные заголовки для объявлений функций, которые немного отличаются от обычного пути - за исключением того, что большинству программ нужна та или иная из тех, которые объявлены в разных местах.)
Когда проект использует Автоинструменты, обычная мантра для его установки:
./configure
make
make install
./configure
обычно позволяет вам использовать параметр командной строки, например --prefix /opt/apache
или что-то подобное, чтобы указать другое имя пути. /usr/local/
- это общий prefix
умолчанию. Локально построенному программному обеспечению гораздо проще жить в одном месте, а поставляемому дистрибутивному программному обеспечению - жить в "главных каталогах": /usr/
/bin/
и так далее. (Упаковщики очень осторожны, чтобы никогда не трогать файлы в /usr/local/
- они знают, что это исключительно для системных администраторов.)
В любом случае, ./configure --prefix /path/to/new/prefix
установит переменную в Makefile
которая будет доступна при компиляции программы, изменяя страницы справочника так, чтобы они указывали на правильное расположение файлов, изменяя файлы конфигурации, и т.д. Так что make
создаст программное обеспечение специально для места установки, которое вы хотите, и make install
установит его в это место.
Большинство программ могут работать даже без последнего шага make install
- просто ./program_name
часто запускает их. Это определенно для каждого проекта - некоторые, такие как postfix
, qmail
и т.д., Состоят из множества различных движущихся частей и полагаются на то, что все они работают вместе. Другие, такие как ls
или su
могут быть достаточно автономными для корректного выполнения из каталога, в котором они были встроены. (Это не часто полезно, но иногда очень полезно.)
Однако не все проекты используют Autotools - они огромные, сложные и убогие в обслуживании. Рукописные Makefile
гораздо проще в написании, и я лично считаю, что распространение простого Makefile
с доступными переменными конфигурации намного проще как для разработчиков, так и для пользователей. (Хотя ./configure ; make ; make install
mantra действительно удобен для пользователей, когда он работает.)