Linux - 进行安装而不替换符号链接

Linux - 进行安装而不替换符号链接

我最近(很愚蠢,因为这里有一个简单的解决方案,我将--prefix=选项设置为默认值以外的其他值/usr/binconfigured 和maked gcc-4.9.1,而没有设置选项--prefix=。我真的不想重新做make整个事情,因为这将花费相当多的时间。

我的/usr/bin/目录已包含gcc-4.8.2,由操作系统 (Ubuntu-14.04) 安装。关键点是现有符号链接都指向 之类的内容gcc-4.8,并且将在命令中被替换为等make install的符号链接gcc-4.9g++-4.9

我可以向 传递一个参数make,告诉它不要替换已经存在的符号链接吗?或者类似方法?

答案1

首先,请注意默认前缀除非明确指定,否则最常见的是 /usr/local。因此,在您的情况下,覆盖 /usr 中的安装可能甚至不是问题,尽管在 /usr 中有一个 GCC 而在 /usr/local 中另一个 GCC 肯定会造成混淆。

虽然我不确定它是否特别适用于 gcc-4.9.1(尽管我看不出它有什么理由不适用),但 autoconf(生成脚本configure)提供了以下功能:在安装时覆盖前缀。

引用autoconf 文档,“安装名称”部分

影响安装位置的最可移植的方法是将正确的位置传递给配置;但是,许多软件包提供了以下一个或两个快捷方式,即将变量分配传递给“make install”命令行以更改安装位置,而无需重新配置或重新编译。

第一种方法涉及为每个受影响的目录提供一个覆盖变量。例如,“make install prefix=/path/to/alternate”将选择一个备用位置,并影响以“${prefix}”表示的所有其他目录配置变量(或者,换句话说,在配置期间指定但不以公共前缀表示的所有目录都必须在安装时覆盖,以便重新定位整个安装)。GNU 编码标准要求对每个目录变量使用 makefile 变量覆盖的方法是必要的,理想情况下不会导致重新编译。但是,某些平台对共享库的语义存在已知限制,最终使用此方法时需要重新编译,在使用 GNU Libtool 的软件包中尤其明显。

第二种方法涉及提供“DESTDIR”变量。例如,“make install DESTDIR=/path/to/alternate”将在所有安装路径前添加“/path/to/alternate”。GNU 编码标准不要求使用“DESTDIR”覆盖方法,并且该方法不适用于具有驱动器号的平台。另一方面,它可以更好地避免重新编译问题,并且即使在配置时未使用“${prefix}”指定某些目录选项,也能很好地工作。对于支持“DESTDIR”的软件包,该变量在配置和“make all”期间应保持未定义状态,并且仅在“make install”期间指定。

所以make install DESTDIR=/opt/gcc-4.8.2 应该基本上可以完成您想要的操作。之后您可能需要根据所需的确切目录结构稍微移动文件,但这对于开始来说已经足够了。

请注意,我还没有测试过这一点;请您自行承担风险。

相关内容