关键词: makefile的意义、依赖的定义、makefile的依赖规则
1. makefile的意义
- makefile用于定义源文件间的依赖关系
- makefile说明如何编译各个源文件并生成可执行文件
2. 依赖的定义
targets : prerequisites ; command1
command2
-
targets
:
1)通常是需要生成的目标文件名
2)make所需要执行的命令名称
3)targets
可以包含多个目标,使用空格对多个目标名进行分隔 -
prerequisities
:
1)当前目标所依赖的其它目标或文件
2)prerequisities
可以包含多个依赖,使用空格对多个依赖进行分隔 -
command
1)完成目标所需要执行的命令 - [Tab]键:
\t
1)每一个命令行必须以\t
字符开始
2)\t
字符告诉make此行是一个命令行 - 续行符:
\
1)可以将内容分开写到下一行,提高可读性
3. makefile的依赖规则
- 当目标对应的文件不存在,执行对应命令
- 当依赖在时间上比目标更新,执行对应命令
- 当依赖关系连续发生时,对比依赖链上的每一个目标
小技巧
make中可以在命令前加上@
符,作用为命令无回显,即当前命名不打印出来,只打印其执行结果
编程说明2_1:makefile初探
all : test
@echo "make all"
test :
@echo "make test"
输出结果:
delphi@delphi-vm:~/code/ch1_make/2_1/$ make
make test
make all
4. 第一个make的编译案例
小技巧
工程开发中可以将最终的可执行文件名和all
同时作为makefile中第一条规则的目标hello.out all : main.o func.o gcc -o hello.out main.o func.o
编程说明2_2:makefile编译方法
func.c
#include "stdio.h"
void foo()
{
printf("void foo() : hello makefile\n");
}
main.c
extern void foo();
int main()
{
foo();
return 0;
}
makefile
# 将main.o和func.o链接生成hello.out
hello.out all : main.o func.o
@gcc -o hello.out main.o func.o # 也可以写成:gcc main.o func.o -o hello.out
# 编译main.c
main.o :
@gcc -o main.o -c main.c # 也可以写成:gcc -c main.c -o main.o
# 编译func.c
func.o :
@gcc -o func.o -c func.c # 也可以写成:gcc -c func.c -o func.o
输出结果:
delphi@delphi-vm:~/code/ch1_make/2/2_2$ make all
gcc -o func.o -c func.c
gcc -o main.o -c main.c
gcc -o hello.out func.o main.o
delphi@delphi-vm:~/code/ch1_make/2/2_2$ ./hello.out
void foo() : hello makefile
5. 小结
- makefile用于定义源文件间的依赖关系
- makefile说明如何编译各个源文件并生成可执行文件
- makefile中的目标之间存在连续依赖关系
- 依赖存在并且命令执行成功是目标完成的充要条件
声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件和《专业嵌入式软件开发》所有!