Skip to content

Commit f703617

Browse files
zhaogewudi666夜弦taoky
authored
Ch03: Improve Clang installation documentation by using a dedicated versioned directory (#104)
* Improve Clang installation instructions and directory layout Clarify the recommended installation method for Clang by using a dedicated directory under /usr/local, instead of copying binaries directly into system paths. Updated PATH explanation, removed unsafe practices, and improved overall clarity and maintainability of the documentation. * style: format markdown with prettier * Update docs/Ch03/index.md Co-authored-by: taoky <[email protected]> * Update docs/Ch03/index.md Co-authored-by: taoky <[email protected]> * Update docs/Ch03/index.md Co-authored-by: taoky <[email protected]> * 针对提出的修改意见进行的 pr 更新 针对之前提交的 pr 对修改内容进行了格式编辑已经 llvm 的版本升级,并修改了关于 apt 的啰嗦内容 * minor fix --------- Co-authored-by: 夜弦 <[email protected]> Co-authored-by: taoky <[email protected]>
1 parent 91fb509 commit f703617

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

docs/Ch03/index.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -419,17 +419,17 @@ Ubuntu 官方源位于国外,往往会有速度与延迟上的限制,可以
419419

420420
注:使用 LLVM 需要其前端 Clang。Clang 在 apt 上有提供,使用 `apt install clang` (或对应版本的 clang 包名)命令安装即可。
421421

422-
在 LLVM 的 [Prebuilt 下载页面](https://releases.llvm.org/download.html) 中下载需要的版本以及自己的发行版所对应的二进制文件(Pre-Built Binaries)。在 “LLVM 10.0.0” 栏目下找到 “Pre-Built Binaries:”,对于 Ubuntu 和 Xubuntu 只有 Ubuntu 18.04 的预编译二进制文件。
422+
在 LLVM 的 [Prebuilt 下载页面](https://releases.llvm.org/download.html) 中下载需要的版本以及自己的发行版所对应的二进制文件(Pre-Built Binaries)。在 “LLVM 16.0.0” 栏目下跳转到对应的 GitHub Release 页面,可以获取到最低兼容 Ubuntu 18.04 的预编译二进制文件。
423423

424424
```console
425425
$ # 下载二进制的压缩文件存档
426-
$ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
426+
$ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.0/clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
427427

428428
$ # 创建 clang 目录
429429
$ mkdir clang
430430

431431
$ # 将下载得到的压缩文件解压到当前目录
432-
$ tar xf clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz -C clang
432+
$ tar xf clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz -C clang
433433

434434
$ cd clang
435435
```
@@ -454,23 +454,30 @@ Ubuntu 官方源位于国外,往往会有速度与延迟上的限制,可以
454454
(Output omitted)
455455
```
456456

457-
这个目录下的 `clang` 和 `clang++` 就类似于我们比较熟悉的 `gcc` 和 `g++`。这两个是可以直接运行进行编译源代码的可执行文件。当然,我们不能每次在需要编译程序的时候输入如此长的路径找到 `clang` 和 `clang++`,而更希望的是能够像 `apt` 那样在任何地方都可以直接运行。我们可以这样做:
457+
这个目录下的 `clang` 和 `clang++` 就类似于我们比较熟悉的 `gcc` 和 `g++`。这两个是可以直接运行进行编译源代码的可执行文件。当然,我们不能每次在需要编译程序的时候输入如此长的路径找到 `clang` 和 `clang++`,而更希望的是能够像 `apt` 命令下载的程序那样在任何地方都可以直接运行。我们可以这样做:
458458

459459
```console
460-
$ # 将 clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04 目录下的所有内容复制到 /usr/local/ 下。
461-
$ sudo cp -R * /usr/local/
460+
$ # 在 /usr/local/ 目录下新建 clang-16.0.0 目录。
461+
$ sudo mkdir /usr/local/clang-16.0.0
462+
$ # 将 clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04 整个目录复制到新建的 /usr/local/clang-16.0.0 下。
463+
$ sudo cp -R * /usr/local/clang-16.0.0
462464
```
463465

464-
为什么是 `/usr/local` 呢?因为 `/usr/local/bin` 处在 PATH 环境变量下。当我们在终端输入命令时,终端会先判断是否为终端的内建命令,如果不是,则会在 $PATH 环境变量中包含的目录下进行查找。因此,只要我们将一个可执行文件放入了 $PATH 中的目录下面,我们就可以像 `apt` 一样,在任意地方调用我们的程序。
466+
在这里我们需要知道什么是 `PATH` 变量,当我们在终端输入命令时,终端会优先判断是否为终端的内建命令,如果不是,则会在 `$PATH` 环境变量中包含的目录下进行查找。因此,只要我们将一个可执行文件放入了 `$PATH` 中的目录下面,我们就可以在任意地方调用我们的程序。那为什么是不直接将 `clang` 目录下的内容直接复制到 `/usr/local` 下呢?这么做虽然能让 `clang/bin` 目录下的二进制文件与 `/usr/local/bin/` 合并,从而实现“到处可调用”,但同时也会把解压的 `clang` 目录下的 `lib`、`include`、`share` 等目录混入系统已有的 `/usr/local/lib`、`/usr/local/include` 等目录中。这种方法针对那些只有单一的二进制编译执行程序来说是简单省事的,但由于 `clang` 有很多版本,并且 `clang` 软件规模较大、较复杂,有很多文件,这么做会带来麻烦:安装的 `clang` 无法进行有效的版本管理,后续卸载也很困难,因此像 `clang` 这样的复杂软件,并不推荐直接安装到 `/usr/local`。更推荐的做法是单独在 `/usr/local/` 下单独创建一个属于 `clang` 的部署目录,并且标注好版本号,这样也更方便后续的版本管理与维护工作:
465467

466-
通过这个命令可以看到当前的 PATH 环境变量有哪些目录。
468+
```console
469+
$ echo 'export PATH=/usr/local/clang-16.0.0/bin:$PATH' >> ~/.bashrc
470+
$ source ~/.bashrc
471+
```
472+
473+
这两条命令将当前 `clang-16.0.0` 目录添加到 PATH 环境变量中。通过这个命令可以看到当前的 PATH 环境变量有哪些目录。
467474

468475
```console
469476
$ echo $PATH
470-
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
477+
/usr/local/clang-16.0.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
471478
```
472479

473-
在上面的复制过程中,源目录和目标目录的两个 `bin` 目录会相互合并,`clang` 和 `clang++` 两个可执行文件也就被复制到了 `/usr/local/bin/` 目录中。这样子也就达到了我们希望能够在任意地方调用我们的可执行文件的目的。此外,在复制的时候 lib、doc 等文件夹也会和 `/usr/local` 下的对应目录合并,将 clang 的库和文档加到系统当中
480+
这里我们可以注意到,新创建的 `/usr/local/clang-16.0.0` 目录已经添加到了 `PATH` 环境变量中,现在就可以在任意地方调用我们下载的二进制编译的程序
474481

475482
!!! warning "有关手工获取的软件"
476483

0 commit comments

Comments
 (0)