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


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.