Номер 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 через
./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.
Как бы то ни было, в сборке на основе cmake вы можете эмулировать «case 4» (для хранения и т.д.), запустив его cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakeв каталоге сборки.
Райан Павлик,
@JackKelly: Спасибо! Я использовал DESTDIR с GNU stow, и мне пришлось исправить структуру каталогов с помощью обычного mv usr/local/* . && rmdir usr/local && rmdir usrиспользования prefix=- намного лучше!
thinkski
Примечание: некоторое программное обеспечение не поддерживает DESTDIR=/tmp/foo make install; для проектов на основе cmake мне больше повезло с cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeустановкой /tmp/foo/{bin,...}; см. пример на github.com/opencv/opencv/issues/11833#issuecomment-401164056 .
timotheecour
Еще одно замечание: DESTDIRи prefixможет быть использовано на make installвместе, то есть make install DESTDIR=/foo/bar/tmp perfix=/local.
Альберт
1
Это может помочь проиллюстрировать использование 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
В случае, если файл ./configure не предоставлен, все равно можно выполнить установку в каталог, специфичный для пользователя, используя: make prefix = / path / to / your / lib / libaio install
Good Will
0
Из 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.
cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake
в каталоге сборки.mv usr/local/* . && rmdir usr/local && rmdir usr
использованияprefix=
- намного лучше!DESTDIR=/tmp/foo make install
; для проектов на основе cmake мне больше повезло сcmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmake
установкой/tmp/foo/{bin,...}
; см. пример на github.com/opencv/opencv/issues/11833#issuecomment-401164056 .DESTDIR
иprefix
может быть использовано наmake install
вместе, то естьmake install DESTDIR=/foo/bar/tmp perfix=/local
.Это может помочь проиллюстрировать использование
DESTDIR
и--prefix
( отсюда ):источник
Из
openssl/INSTALL
Это нестандартно, но INSTALL_PREFIX используется в некоторых других программах.
Это работает для версий OpenSSL до 1.1.x. OpenSSL 1.1.x и выше умеют распознавать обычные
DESTDIR
.источник