Зробити встановлення, але не за замовчуванням каталогів?


148

Я хочу запустити 'make install', щоб у мене було все, що мені потрібно, але я хотів би, щоб він встановлював речі у власну папку на відміну від системної / usr / bin тощо. Це можливо? навіть якщо він посилається на інструменти у / usr / bin тощо?


3
Якщо ви вже створили проект і ви запустили ./configure без префікса , і ви хочете встановити його в призначеному для користувача шляху, см stackoverflow.com/a/17679654/313113
Бітек

Відповіді:


213

Це залежить від упаковки. Якщо Makefile генерується GNU autotools ( ./configure), зазвичай ви можете встановити цільове розташування таким чином:

./configure --prefix=/somewhere/else/than/usr/local

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


9
не повинен make && make installдотримуватися пункт налаштування?
nass

1
Проблема, з якою у мене є, --prefixполягає в тому, що якщо ви запустите a stringsна отриманому бінарному файлі згодом, ви побачите, що шлях зберігається всередині. Я не знаю, чому це відбувається, але я, звичайно, не хочу, щоб мої машинні шляхи на бінарних файлах, які я надсилаю іншим користувачам.
Ерік Айгнер

Еріку, схоже, що в будь-якому разі буде посилання на шлях, який ти пробіжиш, якщо ти будуєш із джерела.
Костянтин Рибаков

44

Оскільки не знаю, в якій версії автоматичного ви можете використовувати змінну середовища DESTDIR .
Переконайтесь у розділі Makefile.

Наприклад:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install

9
Це працює, коли ви запустили конфігурацію без аргументу командного рядка --prefix, і ви вже створили проект, але ви не хочете встановлювати його у місцях за замовчуванням, а натомість вказати власний шлях установки. Це додасть usr / local / bin / шлях до DESTDIR, і ваш проект буде встановлений у $ HOME / Software / LocalInstall / usr / local / bin /
bitek

Це геніальне рішення. Я не знаю, чому це не обрана відповідь! Майже всі інші відповіді просять повторно налаштувати, що означає, що потрібно також переробити. Уявіть, що склав через 2 ~ 3 години всю надбудову MITK, а потім попросив би її повторно, лише тому, що я хочу встановити складені файли в інше місце. Це чудова робота, щоб уникнути такої ситуації.
Дак Доджерс

23
make DESTDIR=./new/customized/path install

Ця швидка команда працювала для мене для встановлення opencv випуску 3.2.0 на Ubuntu 16. Шлях DESTDIR може бути як відносним, так і абсолютним.

Таке перенаправлення також може бути корисним у випадку, якщо користувач не має привілеїв адміністратора, якщо DESTDIR-адреса має правильний доступ для користувача. наприклад / додому //


1
може знадобитися також перекрити PREFIX, якщо він має значення за замовчуванням всередині makefile
Марк Ч.

17

Це може залежати від того, що підтримується модулем, який ви намагаєтеся скласти. Якщо ваш makefile генерується за допомогою автоінструментів, використовуйте:

--prefix=<myinstalldir>

під час запуску ./configure

деякі пакети дозволяють вам також перекривати під час запуску:

make prefix=<myinstalldir>

Однак, якщо ви не використовуєте ./configure, єдиний спосіб точно знати - це відкрити makefile і перевірити. Це має бути однією з перших змінних вгорі.


3
Ви також повинні мати на увазі, що це make prefix=...може призвести до бінарних файлів з неправильно ./configure --prefix=...
зафіксованими


0

Я спробував вищевказані рішення. Жоден не працював.

Врешті-решт я відкрив файл Makefile і вручну змінив шлях префікса на потрібний шлях установки, як показано нижче.

PREFIX ?= "installation path"

Коли я спробував --prefix, "make" поскаржився, що немає такого введення команди. Однак, можливо, деякі пакети приймають - prefix, що, звичайно, є більш чистим рішенням.


1
--prefixваріантом є , ./configureщо ви називаєте ДО make.
Гас

-7

спробуйте використовувати INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY

11
Не пропонуйте людям "спробувати" щось без будь-якої підтверджуючої інформації.
RichieHH

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