Что делает «make install»?

52

Переходя с Windows на Linux, я не могу понять процесс установки программного обеспечения в Linux. В Windows, когда мы запускаем установочный файл, он спрашивает, куда вы хотите установить программу, скорее всего, только в папке программных файлов. Позже он редактирует реестр. Это называется установкой в ​​Windows. Что именно означает «установка программного обеспечения» в Linux?

Предположим, я скачал исходный код, настроил его, а затем собрал бинарный файл, используя make. Теперь это просто бинарная, а не полезная программа. Как это будет установлено? По make install? И что именно делает эта команда?

KawaiKx
источник
1
Мой ответ на stackoverflow.com/questions/528399/… дает краткий обзор обычных видов действий, выполняемых make installшагами с точки зрения программистов.
dmckee

Ответы:

44

Make - программа общего назначения, обычно используемая для компиляции. Но это может быть использовано для чего угодно.

Когда вы делаете что-то вроде «make all», программа make выполняет правило с именем «all» из файла в текущем каталоге с именем «Makefile». Это правило обычно вызывает компилятор для компиляции некоторого исходного кода в двоичные файлы.

Когда вы делаете «make install», программа make берет двоичные файлы из предыдущего шага и копирует их в некоторые подходящие места, чтобы к ним можно было получить доступ. В отличие от Windows, установка требует только копирования некоторых библиотек и исполняемых файлов, и в этом случае требования к реестру отсутствуют. Короче говоря, «make install» просто копирует скомпилированные файлы в соответствующие места.

sharjeel
источник
4
Технически, реестр не является обязательным требованием - то, что добавляют все установщики, это просто удобная функция, очень похожая на базу данных менеджера пакетов в Linux, для людей, которым нравится иметь возможность удалять программное обеспечение.
Гравитация
2
@ Grawity На самом деле, в Windows требуется редактировать реестр по многим причинам, например, по интеграции. В Linux интеграция программного обеспечения друг с другом обычно включает в себя копирование файлов или добавление строк в файлы конфигурации с помощью чего-то вроде сценария после установки.
Камило Мартин
@sharjeel Было бы полезно рассказать, как я могу найти правило с именем allв Makefileи как выглядит маркер конца этого раздела, чтобы я мог видеть, где allостанавливается обработка правила .
Pro Backup
36

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мантра действительно проста для пользователей, когда она работает.)

sarnold
источник
19

make installне делает ничего меньше, чем выполнение installфункции / раздела в вашемMakefile

Sascha
источник
Правильно, ему просто нравится make clean, в основном он просто выполняет коды в разделе.
Вулфрик Ли
8

В отношении установки программного обеспечения в Linux важно отметить, что гораздо более надежно и легко устанавливать программное обеспечение из вашего дистрибутива (это его цель!). Используйте только, make installесли нет другого пути (также рассмотрите альтернативные программы).

Распространенная ошибка пользователей Windows - загружать программы из разных мест и пытаться их устанавливать, забывая проверять их дистрибутивные пакеты, которые можно установить одним щелчком мыши или командой (в диспетчере пакетов).

Также помните, что одной из основных причин отсутствия вирусных инфекций в Linux является то, что программное обеспечение (или должно быть) установлено из центрального (надежного) местоположения, а не из множества случайных сайтов.

В качестве дополнительного примечания, хотя дистрибутивы, такие как Ubuntu, всегда содержат устаревшие пакеты, есть также дистрибутивы, такие как Arch Linux, которые всегда актуальны (хотя они не предлагают буквально все программы, когда-либо выпущенные для Linux, такие как Debian / Ubuntu).

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

Корвин
источник