前言
本文所写代码是基于linux下的编程
一、程序的编译过程
- 预处理 : #开头的命令称为预处理,一般预处理主要做的工作是检查语法和把包含的文件包含进来和宏展开。
- 编译 : 把.c文件转换为.s汇编文件。
- 汇编 : 把.s文件转换为.o二进制文件(机器码)。
- 链接 : 把全部的.o文件和库文件链接起来变成可执行程序。
ps: 编译hello.c
下面这条命令会一次性把上面四个步骤给做好。
gcc -o hello hello.c
-o: (output)后面带输出的文件名
二、文件的编译链接示例
a.c
#include <stdio.h>
#include "a.h"
int main()
{
printf("hello, world!\n");
printf("A= %d\n", A);
test_fun();
return 0;
}
b.c
#include <stdio.h>
#include "a.h"
int test_fun()
{
printf("it is B\n");
return 0;
}
a.h
#define A 1
int test_fun();
直接输入gcc -o test a.c b.c
进行编译链接得到可执行文件test。
缺点:如果工程中的文件数上千万个,那么每次都得输入上千万个文件的文件名。同时如果你只修改了一个文件,其他的文件也需要重新进行预处理,编译,汇编,链接这些操作,效率特别低。
三、makefile的引入
什么是makefile?
makefile就是一个名字为makefile的文件。
makefile的作用是什么?
“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
makefile怎么编写?
核心规则:
目标:依赖1 依赖2
(tab键)命令
命令执行的条件:
①依赖文件比目标文件新;
②没有目标文件;
makefile:
test:a.c b.c a.h
gcc -o test a.c b.c