如何在不破坏系统的情况下将通过 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
那么,回答你的三个问题,
不,您不需要删除 apt-installed
clang
。只需将其保留在 中/usr/bin/clang
。如果您
clang
以用户身份下载并安装,您可能可以选择将其放在主目录中。如果它安装在系统级目录中,它可能会放在 下/usr/local/
。例如,/usr/local/bin/
。因此,这两个版本可以共存。变量
$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/
。你的最后一点是最难的部分,因为没有简单的方法。你从 GitHub 获得的通常是源代码。如果有预先构建的二进制文件,那就太好了。
但最有可能的是,它是源代码,每次要更新时,您都必须 (a) 编译和 (b) 安装。我
clang
以前没有手动安装过,但对于某些带有 的程序Makefile
,可以执行make; make install
。第一个命令编译,第二个命令安装。在此之前,可以使用 、 等将要安装的目录设置./config
为cmake
。
我个人的观点是,如果你不需要最新的功能,那么你很少需要保留编译器那是最新的。所以我认为你不需要clang
那么频繁地重新编译...如果你正在开发一个用于分发的程序,那么用户很少会拥有这样一个新的编译器。
这有帮助吗?