Linux команда make install

Компиляция и установка пакетов из исходного кода с помощью Make

Вступление

При работе с компьютером или сервером Linux большинство необходимых пакетов можно получить при помощи apt или другого менеджера пакетов. Но иногда нужен пакет или более современная версия программы, которых нет в репозиториях.

Данное руководство охватывает вопросы компиляции и установки cURL из исходного кода. Использованный здесь синтаксис применим на большинстве дистрибутивов.

Требования

Для компиляции исходного кода в Linux нужен пакет «build-essential» (в системах на основе Debian) или «Development Tools» (CentOS); данные пакеты содержат компиляторы и библиотеки gcc/g++.

Чтобы установить пакет на Debian и Ubuntu, используйте:

apt-get install build-essential

yum groupinstall «Development Tools»

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

Перед компилированием cURL установите все необходимые зависимости. Также на используемом сервере нужно иметь привилегии root или sudo для установки и компилирования исходного кода.

Извлечение и компилирование исходного кода на VPS

Загрузка Tarball

Для начала нужно скачать исходный код cURL. Существует множество способов это сделать, но в данном руководстве используется tarball, доступный на сайте cURL. При желании URL в следующей команде можно заменить на URL текущей версии cURL, но при этом нужно помнить, что это должна быть ссылка на файл «tar.gz». Запустите:

Это скачает и сохранит исходный код как curl.tar.gz в текущем каталоге.

Теперь нужно извлечь tarball. Для этого запустите:

tar -xvzf curl.tar.gz

Исходный код будет расположен в папке по имени «curl-» с номером версии. При вводе:

будет выведен подобный результат:

/curl ls
curl-7.32.0 curl.tar.gz

В данном случае папка называется «curl-7.32.0», следовательно, чтобы войти в эту папку, нужно ввести:

Конфигурирование и компилирование исходного кода

В этой папке можно найти множество разных файлов. На данный момент нужно обратить внимание на файл «configure». Это скрипт, созданный для того, чтобы помочь запустить программу на различных компьютерах. Запустите:

Это автоматически использует переменные текущей системы, чтобы подготовить исходный код для данного VPS. В основном эта команда проверяет, соответствуют ли библиотеки, установленные в системе, тем, что нужны программе. Данное действие указывает компилятору, где искать библиотеки, нужные исходному коду, в данном случае cURL. Кроме того, данное действие определяет, куда впоследствии установить пакет. По завершению будет создан файл Makefile со всей нужной в нем информацией. Теперь все готово для компилирования исходного кода. Для этого запустите команду:

В результате этого действия будет выведено много лишней и непонятной информации на консоль. Подождите, пока это закончится. Это займет около минуты. По завершению нужно установить исходный код. Запустите как root:

Теперь make будет следовать инструкциям в «Makefile», чтобы установить скомпилированные пакеты. В большинстве случаев это все, что нужно для установки. Теперь можно ввести curl. Если cURL был установлен верно, будет выведен примерно такой результат:

curl: try ‘curl —help’ or ‘curl —manual’ for more information

При извещении об ошибке bash введите:

ln -s /usr/local/bin/curl /usr/bin/curl

Это создаст ссылку на /usr/bin/curl, которая соединяется с /usr/local/bin/curl. Это позволит запустить cURL, просто введя curl в консоль. Обычно это выполняется автоматически, но в некоторых случаях скрипт конфигурации не может найти нужное местоположение установки. Теперь можно ввести:

Это запустит текущую версию cURL. Выведенный результат имеет примерно такой вид:

/curl curl -V
curl 7.32.0 (x86_64-unknown-linux-gnu) libcurl/7.26.0 OpenSSL/1.0.1e zlib/1.2.7 libidn/1.25 libssh2/1.4.2 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp
Features: Debug GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

Читайте также:  Как отключить скачиваемые обновления windows 10

Готово! cURL был успешно скомпилирован и установлен из исходного кода.

Действия, описанные в данном руководстве, подходят для большинства дистрибутивов, следовательно, их можно выполнить для компилирования исходного кода других пакетов. Тем не менее, всегда нужно заранее знакомиться с документацией пакета. Она, как правило, содержит информацию о необходимых зависимостях, и даже иногда подсказывает, какие команды нужно использовать.

Запомните последовательность: ./configure, затем make, а затем make install.

Источник

Configure Make Install

NB: Чем лучше Вы разбираетесь в C++, Linux и работе компиляторов — тем проще Вам будет разобраться с configure make install

Перед установкой

Сначала Вам скорее всего нужно скачать архив с программой, которую Вы хотите установить.

Например, команда для скачивания python3.7:

Затем распаковать архив

tar -xf Python-3.7.0.tgz

И перейти в только что распакованную директорию

В этой директории скорее всего будет находиться скрипт configure

Configure

configure — это не команда linux а скрипт, который обычно лежит в папке к configure

Означает, что означает что префикс установки /usr ,

Бинари уходят в usr/bin
libraries в usr/lib
Проверяется наличие всего необходимого
Создается файл MakeFile

—prefix=PREFIX — папка для установки программы, вместо /, например, может быть /usr/local/, тогда все файлы будут распространены не по основной файловой системе, а в /usr/local;

—bindir=DIR — папка для размещения исполняемых файлов, должна находится в PREFIX;

—libdir=DIR — папка для размещения и поиска библиотек по умолчанию, тоже в PREFIX;

—includedir=DIR — папка для размещения man страниц;

—disable-возможность — отключить указанную возможность;

—enable-возможность — включить возможность;

—with-библиотека — подобно enable активирует указанную библиотеку или заголовочный файл;

—without-библиотека — подобное disable отключает использование библиотеки.

.cpp файлы компилируются в .o файлы

один .h файл может использоваться несколькими .cpp файлами

makefile нужны для того чтобы печатать меньше названий файлов и опций вручную.

С их помощью можно делать build только тех файлов, которые изменились.

Make это инструмент, который вызывает компиллятор. Можно указать тот компиллятор который нужен именно Вам.

С помощью инструкций в makefile можно указать какие именно файлы нужно заново компилировать.

Рассмотрим пример из C++ .

В директории находятся три .cpp файла, два .h файла и три .o файла, оставшиеся от прошлой компиляции.

  • Example.cpp , Example.o
  • Second.cpp , Second.h , Second.o
  • Third.cpp , Third.h , Third.o

Все они нужны для проекта и не могут быть объединены в один файл.

Известно, что Example.cpp включает в себя файл Second.h и других зависимостей не имеет.

Мы хотим, чтобы при изменении самого Example.cpp либо его зависимости Second.h начиналась новая компиляция Example.cpp а затем новый Example.o линковался со старыми Second.o и Third.o

Для этого напишем Makefile aomake

all: simple simple: Example.o Second.o Third.o g++ Example.o Second.o Third.o — Simple Example.o: Example.cpp Second.h g++ -c Example.cpp

Отступы нужно ставить табуляцией

Смотрим на последние две строки:

Если Second.h или Example.cpp (в который включен Second.h) изменились нужно компилировать файл Example.cpp после чего получается object файл Example.o и, как видно из первых двух строк — после обновления Example.o все object файлы линкуются.

Выигрыш в этой ситуации заключается в том, что нам не нужно было перекомпилировать Second.cpp и Third.cpp мы просто перелинковали уже существующие Second.o Third.o с новым Example.o

Чтобы запустить этот файл нужно к команде make добавить опцию f и название файла

У файла Second.cpp две зависимости: Second.h и Third.h

У файла Third.cpp только одна зависимость: Third.h

Учтём эти зависимости в нашем aomake

all: simple simple: Example.o Second.o Third.o g++ Example.o Second.o Third.o — Simple Second.o: Second.cpp Second.h Third.h g++ -c Second.cpp Third.o: Third.cpp Third.h g++ -c Third.cpp Example.o: Example.cpp Second.h g++ -c Example.cpp

Ещё одной полезной опцией является j

-j — jobs Определяет число работ — jobs (commands) которые запускаются одновременно.

Читайте также:  Как linux выделяет память

Если указано больше чем одна -j опция, то применяться будет последняя.

Если -j опция дана без аргументов make не будет ограничивать количество работ запускаемых одновременно. То есть запуститься сможет неограниченное количество работ одновременно.

Более подробную информацию по Makefile вы можете найти в статье «makefile tutorial»

Install

Make — это не единственный способ устанавливать программы под linux. Более того, за сорок с лишним лет существования утилиты make вышло много её версий.

Прежде чем ставить что-то по-старинке с make install — советую изучить checkinstall

Источник

Заметки Дебианщика

debian, linux, php, mongo, oracle, bash

Чарующая магия configure, make и make install

Это небольшая заметка для начинающих линуксоидов, о том что же означают эти три замечательные команды и для чего одни нужны. Начнём, как говорится, с начала. Большинство программ перед использованием надо скомпилировать, то есть преобразовать из текста понятного человеку в набор единиц и нулей, понятных компьютеру. Процесс условно разделён на три этапа: конфигурирование (configure), сборка (make) и установка (make install). Подробности под катом 🙂

./configure

Данная команда выполняет поиск необходимых для компиляции библиотек и заголовочных файлов (это для программ частично или полностью написанных на C/C++ и подобных языков), а так же настройку особых параметров или подключение специальных библиотек, в случае если ./configure обнаружит всё что ему нужно, он создаст Makefiles — файл, необходимый для сборки программы

Выполнить настройку параметров конфигуратора можно при помощи ключей и аргументов этих самых ключей, например:

./configure —prefix=/opt/my_program

При помощи ключа —prefix=

Вы можете указать директорию, которая в дальнейшем будет выступать как префикс для вашей программы (то есть корневая директория). Это связанно с тем что в мире Linux и не только, существует специальная Иерархия Файловой Системы (HFS) в соответствии с которой любая программа, чтобы работать без ошибок, должна быть собрана и установлена.

В файловой системе есть три основных префикса, относительно которых большинство программ конфигурируется, а именно:

  • / — корневая директория операционной системы, так называемый ROOT
  • /usr — директория, в которой находятся приложения пользовательского окружения
  • /usr/local — дополнительная директория для пользовательских программ, собираемых вручную, специально для того чтобы операционная система не превратилась в свалку

Если открыть любую из этих директорий, то можно увидеть очень схожую структуру, как минимум там будут папки: bin, etc, include, libs, sbin.

Если запустить ./configure без ключей, то префиксом по умолчанию (директория, в которую будет установлена собираемая программа) будет /usr/local, помните это если не можете запустить свою программу, возможно у Вас не прописан путь в PATH.

Кроме ключа —prefix в конфигураторе, как правило, имеется ещё множество других ключей, посмотреть их все можно если выполнить:

./configure —help

Самая важная и простая команда/программа, выполняет запуск процедуры компиляции приложения из исходного кода. Для своей работы данная программа использует специальные файлы Makefiles, в которых подробно описан процесс сборки приложения со всеми параметрами, которые мы указали конфигуратору. Результатом успешного выполнения команды make будет собранная программа в текущей директории.

make install

Данная команда выполняет непосредственную установку приложения в указанную, на этапе конфигурирования, директорию, после выполнения команды make install вы можете запустить свежеустановленную программу.

Послесловие

Чтобы не писать три команды по очереди можно написать их в одну строку:

./configure && make && make install

&& — это оператор И пришедший из языка C/C++, однако, с точки зрения оболочки он означает то, что следующую команду нужно выполнить только в случае успешного выполнения предыдущей команды, это очень удобно если один из этапов завершается с ошибкой.

На самом деле make install так же может выполнить сборку, потому как задача install зависит от задачи all (то есть непосредственно сборки приложения), это означает что этап make можно пропустить и выполнить всего две команды, если записать их в одну строку получится:

./configure && make install

Удачи Вам! И спасибо за то что дочитали!

Читайте также:  Настроить vpn сервер windows server 2012

2 thoughts on “ Чарующая магия configure, make и make install ”

Всё, что нужно знать про эти три команды, так это то, что это отличный способ запомоить систему.

Спасибо огромное за статью,всё чётко и понятно.

Источник

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

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

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

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

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

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

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

Многие проекты используют GNU Autotools, чтобы попытаться улучшить их переносимость между аппаратными средствами и операционными системами. (Различные варианты Unix используют немного разные заголовки для объявлений функций, которые немного отличаются от обычного пути — за исключением того, что большинству программ нужна та или иная из тех, которые объявлены в разных местах.)

Когда проект использует Автоинструменты, обычная мантра для его установки:

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

Источник

Оцените статью