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


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.