- 论坛徽章:
- 1
|
我参考了gcc的编译过程,手动跑一遍编译流程是这样的,我有一个源代码f.c
cat f.c
#include<stdio.h>
void f(){printf("hello %d\n",1);}
然后手动跑4个过程:
1. cpp f.c f.i --> 得到头文件/宏都展开的f.i
2. gcc -S f.i --> 得到汇编代码
3. gcc -c f.s --> 得到object文件
4. gcc f.o -o f--> 链接生成。
并没有一个步骤能输出某种编译出来的语法树等编译结果。
那么3个小问题:
(1)是不是说,gcc所有的优化过程都在f.i-->f.s这一步了,f.s就是优化后的结果,在后面到.obj/二进制代码生成过程中,都没有什么优化可做了.
(2)哪一步可以称为"代码生成",是生成.s文件的第2步,还是生成.o文件的第3步?
(3)clang是基于llvm开发的,llvm可以输出语言无关的信息。
那么请问我用clang来编译以上文件的时候,能如何得到某种编译出来的语法树的结果,存到文件里面? clang有某个选项吗,还是要配置clang/llvm才能做到?
|
|