描述:
clang-Clang C,C ++和Objective-C编译器。
clang是一个C、c++和Objective-C编译器,它包含预处理、解析、优化、代码生成、汇编和链接。根据传递的高级模式设置,Clang会在完成完整链接之前停止。尽管Clang是高度集成的,但重要的是了解编译的阶段,了解如何调用它。 这些阶段是:
驱动:
clang可执行文件实际上是一个小型驱动程序,它控制其他工具(如编译器、汇编器和链接器)的整体执行。通常您不需要与驱动程序交互,但是您可以透明地使用它来运行其他工具。
预处理:
此阶段处理输入源文件的标记化,宏扩展,#include扩展以及其他预处理程序指令的处理。 该阶段的输出通常称为“ .i”(对于C),“.ii”(对于C ++),“.mi”(对于Objective-C)或“ .mii”(对于Objective-C ++)文件 。
解析和语义分析:
此阶段解析输入文件,将预处理器令牌转换为解析树。 一旦采用了语法分析树的形式,它就会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 该阶段负责生成大多数编译器警告以及解析错误。 该阶段的输出是“抽象语法树”(AST)。
代码生成和优化:
此阶段将AST转换为低级中间代码(称为“ LLVM IR”),最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 该阶段的输出通常称为“ .s”文件或“ assembly”文件。
Clang还支持使用集成汇编器,在该汇编器中,代码生成器直接生成目标文件。 这避免了生成“ .s”文件和调用目标汇编程序的开销。
汇编程序:
此阶段运行目标汇编程序,以将编译器的输出转换为目标目标文件。 该阶段的输出通常称为“ .o”文件或“ object”文件。
链接器:
此阶段运行目标链接程序,以将多个目标文件合并到可执行文件或动态库中。 此阶段的输出通常称为“ a.out”,“。dylib”或“ .so”文件。
clang静态分析器:
Clang静态分析器是一种工具,可扫描源代码以尝试通过代码分析来发现错误。 该工具使用了Clang的许多部分,并内置在同一驱动程序中。 有关如何使用静态分析器的更多详细信息,请参见https://clang-analyzer.llvm.org。
选项:
阶段选择选项:
-E
运行预处理器阶段。
-fsyntax-only
运行预处理器、解析器和类型检查阶段。
-S
运行前面的阶段以及LLVM生成和优化阶段以及特定于目标的代码生成,从而生成一个程序集文件。
-c
运行上述所有程序,再加上汇编程序&