DESTDIR и PREFIX производства
Я пытаюсь установить программное обеспечение в определенный каталог. Я нашел несколько способов, но не уверен, в чем различия между ними.
-
./configure --prefix=***
-
make install DESTDIR=***
-
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
.