make 是一种依赖关系检查工具。当你的项目有很多的object 的时候,使用它可以带给你很多的便利。
makefile的结构和make的运作流程:
1)# 用“#”来表示注释
2)target: dependecies
#command 前面需要加个Tab缩进
command1
command2
...
#可以用‘\’来续行
target 是我们需要生成的文件的名字。target摆放的顺序并不重要,make 不带参数的时候默认执行第一个target。target也可以使make所需完成的动作,比如使用比较多的clean
dependencies 是生成target所需要的文件列表,也可以为空,就比如上面讲的clean。
command 可以是任意一条shell可以执行的命令。
example1:
demo: main.o fun.o
gcc -o demo main.o fun.o
main.o: main.c def.h
gcc -c main.c
fun.o: fun.c common.h
gcc -c fun.c
clean:
rm -rf *.o demo
install:
mv demo /user/local
当我们输入make 或者 make demo的时候,如果没有main.o 和fun.o 被修改,都会执行
gcc -o demo main.o fun.o
接下来由于引用到main.o和fun.o 会检查这两个依赖的文件是否被跟新。 如果有,则执行gcc -c main.c. test.o 也是如此。
第一次执行顺序:
gcc -c main.c
gcc -c fun.c
gcc -o demo main.o fun.o
第二次如果func.c 被跟新 则:
gcc -c fun.c
gcc -o demo main.o fun.o
makefile 里面宏可以用“=”来定义,用$ 来取宏的值
OBJS = main.o test.o
PATH = /user/local
demo: $(OBJS)
gcc -o demo main.o fun.o
main.o: main.c def.h
gcc -c main.c
fun.o: fun.c common.h
gcc -c fun.c
clean:
rm -rf *.o demo
install:
mv demo $(PATH)