DESTDIR і ПРЕФІКС марки


119

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

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

Я розгублений щодо функцій цих трьох. Чи досягають вони тієї самої мети?

Відповіді:


185

./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 via

./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.


8
Для чого це варто, у складі на основі cmake ви можете імітувати "case 4" (для stow тощо), запустивши cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakeв каталог збірки.
Райан Павлик

@JackKelly: Дякую! Я використовував DESTDIR з GNU stow і мені довелося виправити структуру каталогів mv usr/local/* . && rmdir usr/local && rmdir usrтипово - використання prefix=набагато краще!
thinkki

Примітка: деяке програмне забезпечення не підтримує DESTDIR=/tmp/foo make install; для проектів, заснованих на cmake, мені пощастило з cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeякими встановити /tmp/foo/{bin,...}; див. для прикладу github.com/opencv/opencv/isissue/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
Добре буде

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.