1.写一个Makefile
1.1要素
- 目标 生成目标。
- 依赖项 源文件、o文件(自动推导编译)
- 执行代码
<first_make.c>
<makefile>
first_make:first_make.c
gcc first_make.c -o first_make
1.2执行
make
2. GCC
2.1 预处理(Preprocessing)
预处理包括宏处理、导入头文件。
预处理阶段错误:宏定义错误,找不到头文件……
2.2 编译(Compilation)
编译针对单个C、CPP文件进行,不针对整个项目,不了解关联性错误,将单个C/CPP文件生成汇编码。
编译阶段错误:语法错误
2.3 汇编(Assembly)
生成二进制文件,.o文件。
2.4 链接(Link)
链接所有的.o文件以及动态链接库。
链接错误:找不到.o,找不到链接库,某个函数只有声明没有定义。
2.5 GCC常用选项
-
–c
仅针对源文件进行编译,不链接生成可执行文件。在对源文件进行查错时,或只需产生目标文件时可以使用该选项。 -
-g[gdb]
在可执行文件中加入调试信息,方便进行程序的调试。如果使用中括号中的选项,表示加入gdb扩展的调试信息,方便使用gdb来进行调试。 -
-O[0、1、2、3]
对生成的代码使用优化,数字代表优化级别,缺省默认为2级优化,0为不优化。注意:采用更高级别的优化并不一定得到效率更高的代码。 -
-Dname[=definition]
将名为name的宏定义为definition,如果中括号部分缺省,则宏被定义为1。 -
–Idir
在编译源程序时增加一个搜索头文件的额外目录—dir,即include增加一个搜索的额外目录。 -
–Ldir
在编译源文件时增加一个搜索库文件的额外目录—dir。 -
–llibrary
在编译链接文件时增加一个额外的库,库名为liblibrary.so。 -
–w
禁止所有警告。 -
–Wwarning
允许产生warning类型的警告,warning可以是:main、unused等,最常用是-Wall,表示产生所有警告。如果warning取值为error,其含义是将所有警告作为错误(error),即出现警告就停止编译。
2.6 代码
<gcc_test.c>
预编译
<gcc命令>

生成预编译后的代码,重定向到test.i进行查看,也可以不输出、不查看。
编译
<gcc命令>

生成test.s汇编码文件。
汇编
<gcc命令>

生成二进制test.o文件。
链接
<gcc命令>
<gcc命令> |
生成可执行文件
运行
运行时加载动态链接库。