用源代码版本替换包的 APT 版本?

Min*_*hật 6 upgrade package-management software-sources clang software-installation

如何在不违反系统的情况下用源版本替换通过 APT(或任何其他包管理器)安装的包?我的问题与此链接相同,但我认为答案并不是很有帮助。

例如,我正在尝试构建一个需要 Clang(版本 12.0.0+)的项目,但最新版本的 Clang (APT) 是 10.0.0,所以显然我必须从源代码 (GitHub) 安装 Clang。所以我有3个问题:

  • 我是否需要移除旧的 Clang(APT)?
    当我尝试时sudo apt remove clang,系统还要求我删除很多依赖项(非常重要),我认为如果我删除 Clang,系统会损坏。
  • 我如何设置PATH以便系统使用更高版本的 Clang,因为我的笔记本电脑中有两个版本?
  • 如果一个包是通过 APT 安装的,那么通过sudo apt upgrade. 但是如何在不重新安装的情况下通过 git 升级软件包?每次 clang 更新都需要我将近半天的时间才能完成。

Ray*_*Ray 5

所以,要回答你的 3 个问题,

  1. 不,您不需要删除 apt-installed clang. 只要把它放在它所在的地方/usr/bin/clang

    如果您clang以用户身份下载并安装,您可能可以选择将它放在您的主目录中。如果它安装在系统级目录中,它可能会在/usr/local/. 例如,/usr/local/bin/。所以,这两个版本可以共存。

  2. $PATH变量是最容易的部分。首先,输入env | grep PATH并查看您的PATH变量是否已为您设置。您想看到的是路径出现的顺序。列表中较早的优先级更高。可能/usr/local/bin/已经为您设置好了。如果没有,那么你可以在你的~/.bashrc文件中设置它。做类似的事情:

    export PATH=/usr/local/bin/:"$PATH"

    文件中的某处。当然,如果你颠倒了上面的:

    export PATH="$PATH":/usr/local/bin/

    那么你的/usr/local/bin/优先级最低。你不想那样。文件的其他部分可能会将内容放在/usr/local/bin/. 只要它保持在之前就可以了/usr/bin/

    然后键入source ~/.bashrc并尝试env | grep PATH查看您是否正确完成。请注意,这不仅会影响clang您的所有程序,因此如果您之前有其他程序/usr/local/bin/,那么它们现在将比/usr/bin/.

  3. 你的最后一点是最难的部分,因为没有简单的方法。你从 GitHub 得到的通常是源代码。如果有预先构建的二进制文件,那就太好了。

    但最有可能的是,它是源代码,每次要更新时都必须 (a) 编译和 (b) 安装。我还没有安装clang手动之前,但有一些程序Makefile,一个会做make; make install。第一个命令编译,第二个命令安装它。在此之前,人们可能将目录设置为安装使用./configcmake等等。

我个人的意见是,如果你并不需要最新的功能,那么你很少需要保持一个编译器最新的。所以我认为你不需要clang经常重新编译......如果你正在开发一个分发程序,那么用户很少会有这样一个新的编译器。

这有帮助吗?