1、源代码
add.c
int addTwo(int a, int b){return a+b;}
add.h
int addTwo(int a, int b);
main.c
int main(){ int result = addTwo(3,2); printf(“%d\n”,result); return 0; }
<a name="uZMq7"></a>
### 2、编译过程
<a name="kOHm2"></a>
#### 方法1:命令行写
- add.c >>> add.o
- main.c >>> main.o
- main.o add.o >>> main
> root@ubuntu:/mnt/hgfs/make_demo# ls
> add.c add.h main.c
> root@ubuntu:/mnt/hgfs/make_demo# gcc -c add.c
> root@ubuntu:/mnt/hgfs/make_demo# ls
> add.c add.h add.o main.c
> root@ubuntu:/mnt/hgfs/make_demo# gcc -c main.c
> root@ubuntu:/mnt/hgfs/make_demo# ls
> add.c add.h add.o main.c main.o
> root@ubuntu:/mnt/hgfs/make_demo# gcc -o main main.o add.o
> root@ubuntu:/mnt/hgfs/make_demo# ls
> add.c add.h add.o main main.c main.o
> root@ubuntu:/mnt/hgfs/make_demo# ./main
> 5
<a name="ufUgb"></a>
#### 方法2:makefile
- makefile文件
main:main.o add.o gcc -o main main.o add.o add.o:add.c gcc -c add.c main.o:main.c gcc -c main.c
clean: rm main main.o add.o ```
- 运行结果
root@ubuntu:/mnt/hgfs/make_demo# make
gcc -c main.c
gcc -c add.c
gcc -o main main.o add.o
root@ubuntu:/mnt/hgfs/make_demo# ls
add.c add.h add.o main main.c main.o makefile
root@ubuntu:/mnt/hgfs/make_demo# ./main
5
root@ubuntu:/mnt/hgfs/make_demo# make clean
rm main main.o add.o
root@ubuntu:/mnt/hgfs/make_demo# ls
add.c add.h main.c makefile
root@ubuntu:/mnt/hgfs/make_demo#
- 自动化变量简化写法
main:main.o add.o
gcc -o main main.o add.o%.o:%.c
gcc -c $< -o $@clean:
rm main main.o add.o
- 运行
root@ubuntu:/mnt/hgfs/make_demo# make
gcc -c main.c -o main.o
gcc -c add.c -o add.o
gcc -o main main.o add.o
root@ubuntu:/mnt/hgfs/make_demo# ls
add.c add.h add.o main main.c main.o makefile
root@ubuntu:/mnt/hgfs/make_demo# ./main
5
方式3:自动依赖
- 生成%.d文件
xin@ubuntu:/mnt/hgfs/make_demo$ gcc -MM add.c > add.d
xin@ubuntu:/mnt/hgfs/make_demo$ ls
add.c add.d add.h main.c makefile test
xin@ubuntu:/mnt/hgfs/make_demo$ cat add.d
add.o: add.c
xin@ubuntu:/mnt/hgfs/make_demo$ gcc -MM main.c > main.d
xin@ubuntu:/mnt/hgfs/make_demo$ ls
add.c add.d add.h main.c main.d makefile test
xin@ubuntu:/mnt/hgfs/make_demo$ cat main.d
main.o: main.c add.h
- makefile写法
SRCS = main.c add.c
OBJS = $(patsubst %.c, %.o, $(SRCS))
DEPS = $(patsubst %.c, %.d, $(SRCS))
main:$(DEPS) $(OBJS)
@echo $(OBJS) @echo $(DEPS) gcc -o $@ $(OBJS)%.d:%.c
@echo ddd gcc -MM $< > $@%.o:%.c
@echo ooo gcc -c $< -o $@clean:
rm main main.o add.o main.d add.d
