DESTDIR и PREFIX производства

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

  1. ./configure --prefix=***
  2. make install DESTDIR=***
  3. make install prefix=***

Я запутался в функциях этих трех. Достигают ли они той же цели?

Ответ 1

./configure --prefix=***

Номер 1 определяет, куда пакет пойдет, когда он установлен, и где он будет искать связанные с ним файлы при запуске. Это то, что вы должны использовать, если вы просто компилируете что-то для использования на одном хосте.


make install DESTDIR=***

Номер 2 предназначен для установки во временный каталог, из которого не будет запускаться пакет. Например, это используется при сборке пакетов deb. Человек, создающий пакет, на самом деле не устанавливает все на свое место в своей собственной системе. Возможно, он уже установил другую версию и не хочет ее беспокоить, или он даже не может быть пользователем root. Так он использует

./configure --prefix=/usr

поэтому программа будет ожидать установки в /usr при запуске, затем

make install DESTDIR=debian/tmp

на самом деле создать структуру каталогов.


make install prefix=***

Номер 3 собирается установить его в другое место, но не создавать все каталоги, как это DESTDIR=/foo/bar/baz. Обычно используется с GNU Stow через

./configure --prefix=/usr/local && make && sudo make install prefix=/usr/local/stow/foo

который установит двоичные файлы в /usr/local/stow/foo/bin. По сравнению,

make install DESTDIR=/usr/local/stow/foo

установит двоичные файлы в /usr/local/stow/foo/usr/local/bin.

Ответ 2

Это может помочь проиллюстрировать использование DESTDIR и --prefix (отсюда):

Несколько установок с использованием --prefix и DESTDIR:

Укажите другое местоположение/опцию --prefix для каждой сборки - во время настройки. Например:

untar petsc tar ball
./configure --prefix=/opt/petsc/petsc-3.9.0-mpich --with-mpi-dir=/opt/mpich
make
make install DESTDIR=/tmp/petsc-pkg
untar petsc tar ball
./configure --prefix=/opt/petsc/petsc-3.9.0-openmpi --with-mpi-dir=/opt/openmpi
make
make install DESTDIR=/tmp/petsc-pkg

Ответ 3

Из openssl/INSTALL

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

$ make INSTALL_PREFIX=/tmp/package-root install

(или укажите "--install_prefix =/tmp/package-root" в качестве параметра конфигурации). Указанный префикс будет добавлен перед всеми именами файлов установки.

Это нестандартно, но INSTALL_PREFIX используется в некоторых других программах.

Это работает для версий OpenSSL до 1.1.x. OpenSSL 1.1.x и более поздние версии способны распознавать обычный DESTDIR.