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

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

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

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

--prefix=<myinstalldir>

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

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

make prefix=<myinstalldir>

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

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

Если пакет предоставляет Makefile.PL- можно использовать:

perl Makefile.PL PREFIX=/home/my/local/lib LIB=/home/my/local/lib
make
make test
make install

* дальнейшее объяснение: https://www.perlmonks.org/?node_id=564720

Eli
источник
0

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

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

PREFIX ?= "installation path"

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

Маджид Азими
источник
1
--prefixвариантом является , ./configureчто вы называете ДО make.
Гас
-7

попробуйте использовать INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY
Кристофер
источник
11
Не предлагайте людям «попробовать» что-либо без подтверждающей информации.
RichieHH
Это должен быть комментарий.
EJoshuaS - Восстановить Монику