Что делает --prefix именно тогда, когда используется в ./configure?

29

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

Когда я делаю

./configure --prefix/usr/bin/

Что делает префикс? Это просто установка пакета в это место

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

Если бы я должен был запустить apt-get install, как бы я установить его в определенное место с префиксом

Я также видел

 PREFIX=/tmp/installdir make


 PREFIX=/tmp/installdir make install

Если префикс вызывается в ./configure, почему он всегда делается в этих двух примерах?

Заранее спасибо!


источник
Некоторая информация здесь: Стандарты кодирования GNU: переменные
каталога
проверить обновленный ответ
luv.preet
freetds.org/userguide/config.htm , это поможет вам больше
luv.preet
Рецензенты: речь идет об установке программного обеспечения . У него три закрытых голоса не по теме, как «не об Ubuntu». Если закрытие это каким-то образом согласуется с какой-либо реальной политикой сайта , я предлагаю комментировать. В противном случае это, вероятно, будет вновь открыто, даже если оно будет закрыто.
Элия ​​Каган

Ответы:

32

Когда вы устанавливаете программное обеспечение с помощью make installили sudo make install, разные файлы помещаются в разные каталоги. Исполняемые файлы, которые предоставляют команды, которые пользователь должен запускать, обычно идут в binкаталог, библиотеки обычно идут в libкаталог, справочные страницы обычно идут в manкаталог, и так далее.

При запуске ./configure, параметр позволяет указать , где эти каталоги . Он вызывается потому, что он позволяет вам указать префикс, который появляется в путях к каждому из каталогов, куда должны быть установлены файлы из создаваемой вами программы или библиотеки. Большинство сценариев поддерживают , и пропуск и просто запуск обычно эквивалентны .--prefix--prefixconfigure--prefix./configure./configure --prefix=/usr/local

Чтобы ответить на этот вопрос более полно, я воспроизвел два раздела из моего ответа на Как установить tar-файл «глобально»? (на Unix и Linux ), которые конкретно решают этот вопрос:

Настройка вашей сборки

Если у вас есть исходный код, скомпилированный с помощью команды ./configure and make, вы обычно будете использовать make install(или sudo make install) для его установки. Это копирует файлы из каталога сборки в место установки. Когда объект, который вы устанавливаете, предоставляет исполняемые команды, эти исполняемые файлы, как правило, копируются в каталог, который находится в $PATHили который вы должны рассмотреть возможность добавления $PATH.

Хотя сборка и установка программного обеспечения зачастую так же просты, как и запуск ./configure, makeиногда make checkили make test, а затем make installили sudo make install, иногда вы захотите передать опции в configureсценарий для настройки сборки. В частности, как говорит pfnuesel , это то , как настроить , где программное обеспечение будет установлено. Несмотря на то, что на make installшаге фактически устанавливается программное обеспечение, места, где все будет установлено, обычно определяются на этом ./configureэтапе.

Наиболее распространенным вариантом для этого является --prefix. Префикс по умолчанию, когда вы не говорите, configureчто использовать, обычно /usr/local. (Иногда исходный код программы или библиотеки по умолчанию использует какой-либо другой префикс. К счастью, это редко.)

Так ./configureобычно эквивалентно ./configure --prefix=/usr/local. Чтобы установить программное обеспечение в вашем домашнем каталоге, вы можете использовать ./configure --prefix=/home/galahad(если /home/galahadэто ваш домашний каталог) или --prefix="$HOME". Тогда, конечно, вы все равно должны собрать и установить программное обеспечение с make. Я должен сказать, что не все программное обеспечение, которое распространяется в форме исходного кода, построено таким образом. Вы всегда должны искать документацию внутри архива исходного кода.

Что --prefixзначит

При запуске вы указываете, что программное обеспечение должно быть установлено в каталоге. Но это редко, если вообще когда-либо, помещает свободные файлы в . Вместо этого он помещает файлы, которые служат различным целям, в разные подкаталоги . Если эти подкаталоги не существуют, он создает их../configure --prefix=directorydirectorydirectorydirectory

Исполняемые файлы обычно входят directory/bin, хотя они могут входить, directory/sbinесли они обычно используются для системного администрирования, или они могут (реже в наши дни) участвовать в directory/gamesиграх. Библиотеки идут в directory/libдругой каталог с таким же именем, как directory/lib32. Заголовочные файлы входят в directory/include. Страницы руководства входят directory/man. Входят файлы данных, используемые программным обеспечением directory/share.

Вот что значит directoryбыть префиксом . Это родительский каталог, который содержит места, в которые будут установлены разные файлы. Таким образом, он отображается как префикс в абсолютных путях большинства файлов и каталогов, созданных с помощью команды make install или sudo make install.

Есть некоторые исключения из этого. Общесистемные файлы конфигурации - которые иногда создаются при установке программного обеспечения, которое будет их использовать, хотя и не всегда, - обычно включаются /etc. Обычно это не зависит от указания другого префикса. Даже если вы установите много программного обеспечения /usr/local, оно все равно будет в основном использоваться /etc, и ваш /usr/local/etcкаталог, вероятно, будет несуществующим, пустым или будет содержать очень мало файлов.

Во многих системах вы можете найти больше информации о типовой структуре файловой системы, запустив ее man hier. Если вы используете систему GNU / Linux, вас может заинтересовать стандарт иерархии файловых систем .

Элия ​​Каган
источник
2

Он сообщает местоположение вещей, которые необходимы для настройки текущего пакета или программного обеспечения.

Как и в простом случае, он может определить местоположение библиотек ssl:

--with-libssh2=/usr/local  #used in configuring nagios

и он также сообщает, какие пакеты не нужно настраивать, чтобы сделать подходящие компиляции программы в соответствии с вашей системой:

--disable-shared  # used in configuring nagios
--disable-link-balancer  # used in configuring Firehol

Это просто дополнительные опции, чтобы сделать компиляцию подходящей для вашей системы. Это то, что я думаю. Поправьте меня, если это что-то еще.

--prefix=PREFIXОпция устанавливает независимые от архитектуры файлы PREFIX. Когда вы запускаете make installкоманду, библиотеки помещаются в PREFIX/libкаталог, исполняемые файлы в PREFIX/binкаталог и так далее.

Если этот аргумент не передан configureкоманде, тогда значением по умолчанию является /usr/local.

luv.preet
источник