1、源代码

add.c

  1. int addTwo(int a, int b){
  2. return a+b;
  3. }

add.h

int addTwo(int a, int b);

main.c

  • main.c文件引用了add.c中的方法 ```

    include

    include “add.h”

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