进行安装,但不进行默认目录设置吗?


148

我想运行“ make install”,这样我就能拥有所需的一切,但是我希望将它们安装在自己的文件夹中,而不是系统的/ usr / bin等。这可能吗?即使它引用了/ usr / bin等中的工具?


3
如果您已经构建了项目并且没有前缀就运行了./configure,并且希望将其安装在自定义路径中,请参阅stackoverflow.com/a/17679654/313113
bitek 2014年

Answers:


213

这取决于包装。如果Makefile是由GNU自动工具(./configure)生成的,则通常可以这样设置目标位置:

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

如果Makefile不是由自动工具生成的,而是与软件一起分发的,则只需在编辑器中将其打开并进行更改即可。安装目标目录可能在某个位置的变量中定义。


9
不应该make && make install遵循configure子句?
纳斯2015年

1
--prefix遇到的问题是,如果strings以后在生成的二进制文件上运行,则会看到路径存储在内部。我不知道为什么会发生这种情况,但是我当然不希望我的机器路径位于运送给其他用户的二进制文件上。
Erik Aigner

Erik,如果您是从源代码构建的,那么看起来无论如何都会引用您运行make的路径。
康斯坦丁·里巴科夫

44

由于不知道哪个版本的automake,可以使用DESTDIR环境变量。
确定请参见Makefile。

例如:

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

9
当您运行不带--prefix命令行参数的配置并且已经构建了项目,但是您不想将其安装在默认位置,而是指定自定义安装路径时,此方法有效。这会将默认的usr / local / bin /路径附加到DESTDIR,您的项目将安装到$ HOME / Software / LocalInstall / usr / local / bin /
bitek 2014年

这是一个绝妙的解决方案。我不知道为什么这不是我们选择的答案!几乎所有其他答案都要求重新配置,这意味着还需要重新配置。想象一下,在2到3个小时后编译了整个MITK超级构建,然后由于我想将已编译的文件安装到其他位置而被要求重做。为避免这种情况,这里的工作很不错。
Duck Dodgers

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

对于在Ubuntu 16上安装opencv版本3.2.0而言,此快速命令对我有用。DESTDIR路径可以是相对的也可以是绝对的。

只要DESTDIR位置对用户具有正确的访问权限,这种重定向在用户没有管理员特权的情况下也很有用。例如/ home //


1
如果makefile中具有默认值,则可能还需要覆盖PREFIX
Mark Ch

17

这可能取决于您要编译的模块所支持的内容。如果您的makefile是使用自动工具生成的,请使用:

--prefix=<myinstalldir>

运行./configure时

一些软件包还允许您在运行时覆盖:

make prefix=<myinstalldir>

但是,如果您不使用./configure,则唯一可以确定的方法是打开makefile并进行检查。它应该是顶部的前几个变量之一。


3
您还应该意识到,这make prefix=...可能会导致二进制文件使用错误的硬编码路径,因为在此之后通常无法对其进行修改./configure --prefix=...
Tobias Kienzler 2013年


0

我尝试了上述解决方案。没有工作。

最后,我打开了Makefile文件,并将前缀路径手动更改为所需的安装路径,如下所示。

PREFIX ?= "installation path"

当我尝试--prefix时,“ make”抱怨没有这样的命令输入。但是,也许某些软件包接受--prefix,这当然是一种更干净的解决方案。


1
--prefix选项是./configure您称为BEFORE的make
古斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.