我真正理解的一件事是关于clang的功能,如果clang是编译器的前端部分,它应该只为源代码做解析器工作,剩下的工作将完成通过LLVM。但是clang也可以生成可执行文件。那么如何理解呢?clang和llvm之间的关系是什么?
答案 0 :(得分:17)
如果您非常具体:clang可执行文件是编译器驱动程序。它调用生成可执行文件所需的所有部分。它调用执行前端作业的libclang:parser / lexer,语义分析,构建AST和代码生成。当AST降低到LLVM IR时,前端作业完成,优化器和LLVM启动。在优化代码之后,编译器驱动程序将调用目标指定的LLVM后端,最后调用构建可执行文件的链接器。这就是clang编译器驱动程序可以构建可执行文件的原因。
答案 1 :(得分:4)
LLVM是一个编译器后端,它是在clang之前编写的,它最初在一个名为' llvm-gcc'的工具中使用gcc的前端。 Clang是前端代码的名称,但clang也是包含clang前端的工具的名称,但也会为您运行整个编译。后来的编译阶段要么作为库内置在clang工具中,要么它们是单独的可执行文件,clang知道如何调用它们。使用正确的命令行参数,您可以通过
使clang停止Clang将作为整个构建的驱动程序,因为这是程序员通常想要的,解析的源,生成的对象,可执行文件。希望抽象语法树向你吐唾沫是非常罕见的。
显然,这是所有LLVM http://llvm.org
的源泉以下是Chriss Lattner解释LLVM是https://www.youtube.com/watch?v=029YXzHtRy0的视频。钱德勒·卡鲁斯(Chandler Carruth)对你曾经研究过的有关铿锵声的部分内容进行了讨论。
答案 2 :(得分:4)
Clang有三种含义:
答案 3 :(得分:0)
实际上,LLVM可以完成制作exe文件的大部分工作