1)总体介绍
LLVM是一个编译器基础设施项目,或者说是一个完整的"编译器生态",它的核心设计就是一套通用的中间表示(IR,Intermediate Representation),并围绕它构建了一系列用于处理、优化和转换代码的库与工具。
2)组成部分
前端 (Frontend):好比是针对不同车型(编程语言)的"定制零件机床"。比如,Clang 负责处理 C/C++,Flang 负责处理 Fortran。它们共同作用是把高级语言解析成一种统一的、标准化的零部件(LLVM IR)。
优化器 (Optimizer):相当于工厂里的"通用加工中心"。它与具体的车型或零件无关,只负责对收到的标准化零部件进行各种打磨、优化和重构,让它变得更高效、更轻便。
后端 (Backend):等同于"最终组装线"。它会接收优化好的零部件,并根据最终要交付的"客户"需求------比如是 x86 架构的 PC、ARM 架构的手机还是 PowerPC 架构的服务器,将其组装成对应的可执行文件或机器码。
3)llvm下载文件介绍
llvm:对应了总体项目,对IR的优化、根据架构组装可执行文件,在这个文件夹中。
Clang:C编译器前端,将源码编译为IR,Clang只负责发起链接,会调用外部链接器。
Compiler-RT:Clang 的 Sanitizer 功能 依赖生态中的 compiler-rt 组件,对应-fsanitize=...选项。
libc++:对应gcc中的libstdc++,是llvm生态对于C++标准库的实现,RedHat、CentOS等系统默认使用libstdc++,MacOS默认使用libc++(下载时的名称是libcxx)。
4)Clang的内置头文件
位置在lib/clang/version_xxx中。在 Clang 的官方文档中特别提到,内置头文件的位置是相对于 Clang 二进制文件路径计算的。因此,如果你在安装后移动了 clang 或 clang++ 二进制文件的位置,必须确保相应的内置头文件目录也一并移动,否则编译器会因找不到 stddef.h 等基础头文件而报错。使用 clang++ -print-resource-dir 可以查询这个路径。