Makefile 101 :Intro

新建文件 ,文件名 makefile 或 Makefile

格式:
target: dependencies

command

目标:要生成的目标文件
依赖:目标文件由哪些文件生成
命令:通过执行该命令由依赖文件生成目标

工作原理:

1、若想生成目标,检查规则中的依赖条件是否存在,如不存在,则寻找是否有规则用来生成该依赖文件

2、检查规则中的目标是否需要更新,必须先检查它的所有依赖,依赖中有任一个被更新,则目标必须更新

分析各个目标和依赖之间的关系
根据依赖关系自底向上执行命令
根据修改时间比目标新,确定更新
如果目标不依赖任何条件,则执行对应命令,以示更新

Example 1:

gcc test.c -o test // 根据test.c文件,编译一个 test的可执行文件出来

➡ 用makefile来完成这一过程如下:

1
2
test: test.c
gcc test.c -o test

执行:

1
2
➜   make
gcc hello.c -o hellofrommakefile

Example 2:
1
2
3
4
5
6
7
8
9

main: main.c tool.o
gcc main.c tool.o -o main

tool.o: tool.c
gcc -c tool.c

clean:
rm *.o main

执行命令 make

执行 make clean

Example 3:

执行所有的target

1
2
3
4
5
6
7
8

all: stage1 stage2

stage1:
@echo "I am stage1"

stage2:
echo "I am stage2"

output:

1
2
3
4
➜  example_stages make
I am stage1
echo "I am stage2"
I am stage2

Example 4:
other FAQs:
  • 编译的时候一直报makefile:29: *** missing separator错误。最后定位到是语法错了。输入的tab键被编辑器自动替换成4个空格了,导致一直报错;vim下可以这样写入tab键:ctr+v+i,会写入一个tab键
  • 对每个 .c 文件进行编译,生成 .o 文件,然后对几个 .o 文件联合编译生成可执行的文件

More Ref: