-
makefile 的意义
- makefile 用于定义源文件间的依赖关系
- makefile 说明如何编译各个源文件并生成可执行文件
-
依赖的定义
targets:prerequisites;command1 ' ' command2
-
makefile 中的元素含义
-
targets
- 通常是需要生成的目标文件名
- make 所需执行的命令名称
-
prerequisities
- 当前目标所依赖的其它目标或文件
-
command
- 完成目标所需要执行的命令
-
-
注意事项
-
targets 可以包含多个目标
- 使用空格对多个目标名进行分隔
-
prerequisites 可以包含多个依赖
- 使用空格对多个依赖进行分隔
-
[Tab] 键:
- 每一个命令行必须以 [Tab] 字符开始
- [Tab] 字符告诉 make 此行是一个命令行
-
续行符:
- 可以将内容分开写到下一行,提高可读性
-
makefile 中可以在命令前加上
@
,使得命令无回显
-
-
依赖示例
all:test echo "make all" test: echo "make test"
-
依赖规则
- 当目标对应的文件不存在,执行对应命令
- 当依赖在时间上比目标更新,执行对应命令
- 当依赖关系连续发生时,对比依赖链上的每一个目标
-
示例:利用 main.c 和 func.c 源文件生成 hello.out 可执行文件
-
源代码文件
//func.c #include <stdio.h> void foo(){ printf("print void foo()"); } //main.c #include <stdio.h> extern void foo(); int main() { foo(); return 0; }
-
makefile 文件
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
-
执行 make,输出:
gcc -o func.o -c func.c gcc -o main.o -c main.c gcc -o hello.out func.o main.o
-
修改 func.c 文件 => 当依赖在时间上比目标更新,执行对应命令
//func.c #include <stdio.h> void foo(){ printf("print void foo() "); }
-
再次执行 make,输出:
gcc -o func.o -c func.c gcc -o hello.out func.o main.o
-
-