初识makefile的结构
1、makefile的意义
- makefile用于定义源文件间的依赖关系
- makefile说明如何编译各个源文件并生成可执行文件
依赖的定义:
targets : prerequisites ; command1
command2
2、makefile中的元素含义
- tartgets
- 通常是需要生成的目标文件名
- make所需执行的命令名称
- preprequisities
- 当前目标所以依赖的其他目标或者文件
- command
- 完成目标所需要执行的命令
3、规则中的注意事项
- targets可以包含多个目标
- 使用空格对多个目标名进行分隔
- preprequisites可以包含多个依赖
- 使用空格对多个依赖进行分隔
- [Tab]键:’\t’
- 每一个命令行必须以[Tab]字符开始
- [Tab]字符告诉make此行是一个命令行
- 续行符:\
- 可以将内容分开写到下一行,提高可读性
4、一个makefile的依赖示例
all:test
echo "make all"
test:
echo "make test"
5、依赖规则
- 当目标所对应的文件不存在,执行对应命令
- 当依赖在时间上比目标更新,执行对应命令
- 当依赖关系连续发生时,对比依赖链上的每一个目标
6、小技巧
makefile中可以在命令前加上**@符,作用为命令无回显**。
7、编程实验
all : test
@echo "make all"
test :
@echo "make test"
//编译
$ make
make test
make all
$ make test
make test
8、第一个make的编译案例
hello.out : main.o func.o
gcc -o hello.out main.o func.o
main.o : main.c
gcc -o main.o -c main.c
func.o : func.c
gcc -o func.o -c func.c
9、小技巧
工程开发中可以将最终可执行文件名和all同时作为makefile中第一条规则的目标。
hello.out all : main.o func.o
gcc -o hello.out main.o func.o
10、小结
- makefile用于定义源文件间的依赖关系
- makefile说明如何编译各个源文件并生成可执行文件
- makefile中的目标之间存在连续依赖关系
- 依赖存在并且命令执行成功是目标完成的充要条件