【问题标题】:Make install, but not to default directories?进行安装,但不安装到默认目录?
【发布时间】:2011-03-15 10:30:57
【问题描述】:

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

【问题讨论】:

标签: linux gcc makefile autotools


【解决方案1】:

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

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

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

【讨论】:

  • 不应该make && make install跟在configure子句后面吗?
  • 我对@9​​87654324@ 的问题是,如果您之后在生成的二进制文件上运行strings,您会看到路径存储在其中。我不知道为什么会发生这种情况,但我当然不希望将我的机器路径放在我发送给其他用户的二进制文件上。
  • Erik,如果您从源代码构建,看起来无论如何都会引用您运行 make 的路径。
  • 如果您打算从/somewhere/else/than/usr/local 运行该软件,这是正确的答案。如果您希望将文件收集在一个目录中(以准备创建 tarball 或安装包),但打算最终从其他位置安装和运行它们,请将前缀设置为最终安装目录,并使用 DESTDIR 指定暂存目录。
【解决方案2】:

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

--prefix=<myinstalldir>

运行 ./configure 时

一些包允许你在运行时也覆盖:

make prefix=<myinstalldir>

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

【讨论】:

  • 您还应该知道make prefix=... 可能会导致二进制文件的硬编码路径错误,因为在./configure --prefix=... 之后通常无法修改这些路径
【解决方案3】:

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

例如:

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

【讨论】:

  • 当您运行 configure 时没有 --prefix 命令行参数并且您已经构建了项目但您不想将其安装在默认位置而是指定自定义安装路径时,此方法有效。这会将默认的 usr/local/bin/ 路径附加到 DESTDIR,您的项目将安装到 $HOME/Software/LocalInstall/usr/local/bin/
  • 这是一个绝妙的解决方案。我不知道为什么这不是选择的答案!几乎所有其他答案都要求重新配置,这意味着也需要重新制作。想象一下,在 2~3 小时后编译了整个 MITK 超级构建,然后被要求重做,只是因为我想将编译后的文件安装到不同的位置。这是避免这种情况的绝妙工作。
  • 原来的问题是模棱两可的,但我认为这个答案实际上是正确的。 DESTDIR 用于在系统配置为标准位置时将文件安装到特定位置。 gnu.org/software/automake/manual/html_node/DESTDIR.html
  • @AlexBitek DESTDIR 在这种情况下并不总是有效。在某些情况下,有问题的软件在生成其文件的内容时使用由 configure 设置的 --prefix(例如硬编码默认路径以查找配置文件)。 DESTDIR 旨在将文件收集到临时暂存目录中,您将使用该目录构建 tarball 或安装软件包,而不是直接从该目录运行。它可能有效,也可能无效,或者可能存在一些警告,即软件对某些事物使用相对路径,而对其他事物使用绝对路径。
【解决方案4】:

尝试使用 INSTALL_ROOT。

make install INSTALL_ROOT=$INSTALL_DIRECTORY

【讨论】:

  • 不要建议人们在没有任何确凿信息的情况下“尝试”某事。
  • 这应该是一条评论。
【解决方案5】:
make DESTDIR=./new/customized/path install

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

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

【讨论】:

  • 如果 PREFIX 在 makefile 中有默认值,可能还需要覆盖它
【解决方案6】:

我尝试了上述解决方案。没有任何效果。

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

PREFIX ?= "installation path"

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

【讨论】:

  • --prefix 选项是您在 make 之前调用的 ./configure
【解决方案7】:

如果包提供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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多