常用命令
1.首先是最常用的,源文件生成可执行文件
1 | gcc main.c |
默认生成a.out的可执行文件,main.c经历了预处理、汇编、编译、链接操作
2. 指定输出文件的文件名 -o
1 | gcc main.c -o main |
生成可执行文件main
3. 预处理 -E
1 | gcc -E main.c -o main.i |
最简单的打印hello,world都要大几百行代码。预处理的作用是直接将#include<xxx.h>、#include”xxx.h”还有宏进行直接的复制粘贴操作.尖括号<>和双引号”“的区别在于,尖括号包含的头文件预处理器会直接搜索指定目录,双引号包含的头文件预处理器则优先在当前目录下查找。也就是系统的头文件我们一般都使用尖括号<>,自己定义的则使用双引号。gcc有选项可以更改目录,这里不再多说。
4. 编译生成汇编代码
1 | gcc -S main.i |
生成名为main.s的文本文件,里面是汇编语言。
5. 汇编
1 | gcc -c main.s |
汇编器将汇编代码转换成目标文件main.o
6. 链接
1 | gcc main.o -o main |
链接器将目标文件链接为可执行文件-o为优化等级,-O1、-O2、-O3,级别越大优化效果越好。
多文件编译方法
对于add.h、add.c、main.c三个文件
add.h
1 | int add(int a,int b); |
add.c
1 | int add(int a, int b) |
main.c
1 |
|
1.直接源码到可执行文件
1 | gcc main.c add.c -o main |
生成名为main的可执行文件
2.分别编译各个源文件,然后进行链接
1 | gcc -c add.c #生成add.o |
两种方法各有优缺点,第一种简便但是需要对所有文件进行重新编译,第二种方法可以只重新编译修改的文件,而不需要浪费时间重新编译整个工程。(详情请看另一篇介绍编译与链接的文章)