安装,但不是默认目录?

Jon*_*now 129 linux gcc makefile autotools

我想运行'make install'所以我拥有我需要的一切,但是我想把它安装在自己的文件夹中而不是系统的/ usr/bin等可能吗?即使它引用了/ usr/bin等中的工具?

Tho*_*mas 185

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

./configure --prefix=/somewhere/else/than/usr/local
Run Code Online (Sandbox Code Playgroud)

如果Makefile不是由autotools生成的,而是随软件一起分发的,只需在编辑器中打开并更改即可.安装目标目录可能在某处的变量中定义.

  • 不应该`make && make install`遵循configure子句? (9认同)
  • 当然.我认为OP会知道这一点. (5认同)
  • 我对“--prefix”的问题是,如果您随后在生成的二进制文件上运行“strings”,您会看到路径存储在里面。我不知道为什么会发生这种情况,但我当然不希望我的机器路径位于我发送给其他用户的二进制文件上。 (2认同)

And*_*dor 36

既然不知道哪个版本的automake可以使用DESTDIR环境变量.
请参阅Makefile以确定.

例如:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install
Run Code Online (Sandbox Code Playgroud)

  • 当您运行configure而不使用--prefix命令行参数并且您已经构建了项目但是您不想将其安装在默认位置而是指定自定义安装路径时,这种方法很有效.这会将默认的usr/local/bin /路径附加到DESTDIR,您的项目将安装到$ HOME/Software/LocalInstall/usr/local/bin / (9认同)
  • @AlexBitek DESTDIR 在这种情况下并不总是有效。在某些情况下,相关软件在生成其文件内容时可能会使用由配置设置的 --prefix(例如,硬编码默认路径以查找配置文件)。DESTDIR 旨在将文件收集到临时暂存目录中,您将使用该目录来构建 tarball 或安装软件包,而不是直接从该目录运行。它可能有效,也可能无效,或者可能存在一些警告,即软件对某些内容使用相对路径,对其他内容使用绝对路径。 (2认同)

Tre*_*e77 16

它可能取决于您尝试编译的模块支持的内容.如果使用autotools生成makefile,请使用:

--prefix=<myinstalldir>

运行./configure时

某些包允许您在运行时也覆盖:

make prefix=<myinstalldir>
Run Code Online (Sandbox Code Playgroud)

但是,如果你没有使用./configure,只有这样才能确定是打开makefile并检查.它应该是顶部的前几个变量之一.

  • 你还应该知道`make prefix = ...`可能会导致二进制文件的硬编码路径错误,因为在./configure --prefix = ...之后通常不会修改它们. (3认同)

小智 16

make DESTDIR=./new/customized/path install
Run Code Online (Sandbox Code Playgroud)

这个快速命令对我来说适用于Ubuntu 16上的opencv版本3.2.0安装.DESTDIR路径可以是相对的也可以是绝对的.

只要DESTDIR位置对用户具有正确的访问权限,用户没有管理员权限就可以使用这种重定向.例如/ home //


eli*_*eli 5

如果包提供了Makefile.PL- 一个可以使用:

perl Makefile.PL PREFIX=/home/my/local/lib LIB=/home/my/local/lib
make
make test
make install
Run Code Online (Sandbox Code Playgroud)

* 进一步说明:https : //www.perlmonks.org/?node_id=564720