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

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

如何在不破坏系统的情况下将通过 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 更新我都要花将近半天的时间才能完成。

答案1

那么,回答你的三个问题,

  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那么频繁地重新编译...如果你正在开发一个用于分发的程序,那么用户很少会拥有这样一个新的编译器。

这有帮助吗?

相关内容