编译过程及keil中选项的作用

以下过程都是编译器做的

1.预处理

所有#展开

生成.i文件

2.编译

将上述文件生成.s汇编文件,即文件里面现在是汇编代码

3.汇编

将上述汇编文件生成二进制文件.o,也就是机器码

4.链接

给上述二进制文件找到依赖的库,最后生成可执行文件.out

所以可以看出,不是说汇编语言就不需要编译器,编译器的作用是将不管是.c文件还是.s文件,最后生成可执行文件

所以,很多编译器比如gcc,armcc不只有编译高级语言的功能,还可以编译汇编语言,但是对于c语言,因为c语言的书写是规范的,所以编译器都识别这种语言。但是对于不同书写的汇编,gcc和armcc拿到不同的汇编文件生成的二级制文件也不一样,导致最后形成的可执行文件也不一样,所以对于汇编语言,可以选用通用的gcc编译器

而keil中的选项:translate,build,rebuild

其中translate的作用是生成.o文件,也就是对源码进行编译汇编,如果是汇编代码,则直接进行汇编,生成二进制的机器码

,但这个过程还没有生成可执行文件,所以不可以拿这个结果去调试,应该进行链接

在点完translate之后应该继续build,如果文件发生更改,build会重新编译源代码改动的部分,并进行链接生成可执行文件

translate之后是汇编(assembling),build之后是link(链接)

rebuild之后是assembling...linking...

但是如果修改代码之后,一个build自动完成改动后的汇编和链接生成可执行文件

如果是rebuild它会重新汇编链接所有代码




猜你喜欢

转载自blog.csdn.net/chengchaonan/article/details/80697991