Сделать установку, но не в каталоги по умолчанию?


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следовать пункту конфигурации?
— насс

1
Проблема, с --prefixкоторой я столкнулся, заключается в том, что если вы stringsпотом запустите получившийся двоичный файл, вы увидите, что путь хранится внутри. Я не знаю, почему это происходит, но я, конечно, не хочу, чтобы мои машинные пути были в двоичных файлах, которые я отправляю другим пользователям.
— Эрик Эйгнер

Эрик, похоже, в любом случае будут ссылки на путь, который ты запустишь, make, если ты собираешься из исходного кода.
— Константин Рыбаков

44

Поскольку не знаю, какую версию automake вы можете использовать переменную окружения DESTDIR .
Смотрите Makefile, чтобы быть уверенным.

Например:

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

9
Это работает, когда вы запустили configure без аргумента командной строки --prefix, и вы уже создали проект, но не хотите устанавливать его в расположениях по умолчанию, а вместо этого указываете пользовательский путь установки. Это добавит путь по умолчанию usr / local / bin / path к 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 имеет права доступа для пользователя. напр. / home //


1
может также понадобиться переопределить PREFIX, если он имеет значение по умолчанию внутри make-файла
— Mark Ch

17

Это может зависеть от того, что поддерживается модулем, который вы пытаетесь скомпилировать. Если ваш make-файл создан с помощью автоинструментов, используйте:

--prefix=<myinstalldir>

при запуске ./configure

некоторые пакеты позволяют также переопределять при запуске:

make prefix=<myinstalldir>

однако, если вы не используете ./configure, единственный способ узнать наверняка - открыть make-файл и проверить. Это должна быть одна из первых переменных наверху.


3
Вы также должны знать, что это make prefix=...может привести к двоичным файлам с неверно жестко закодированными путями, поскольку они, как правило, не могут быть изменены после./configure --prefix=...
— Тобиас Кинцлер


0

Я попробовал вышеуказанные решения. Никто не работал.

В конце я открыл файл Makefile и вручную изменил путь префикса к желаемому пути установки, как показано ниже.

PREFIX ?= "installation path"

Когда я попробовал --prefix, «make» пожаловался, что такого ввода команд нет. Однако, возможно, некоторые пакеты принимают --prefix, что, конечно, является более чистым решением.


1
--prefixвариантом является , ./configureчто вы называете ДО make.
— Гас

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.