04.MakeFile基本操作
约 460 字大约 2 分钟
1.基本格式
targets : prerequisties
[tab键] command
说明
target:目标文件,可以是 OjectFile,也可以是执行文件,还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisite:要生成那个 target 所需要的文件或是目标。
command:是 make 需要执行的命令,
2.Makefile 规则
- make 会在当前目录下找到一个名字叫 Makefile 或 makefile 的文件
- 如果找到,它会找文件中第一个目标文件(target),并把这个文件作为最终的目标文件
- 如果 target 文件不存在,或是 target 文件依赖的 .o 文件(prerequities)的文件修改时间要比 target 这个文件新,就会执行后面所定义的命令 command 来生成 target 这个文件
- 如果 target 依赖的 .o 文件(prerequisties)也存在,make 会在当前文件中找到 target 为 .o 文件的依赖性,如果找到,再根据那个规则生成 .o 文件
3.伪目标
为了避免 target 和 Makefile 同级目录下 文件/文件夹 重名的这种情况,我们可以使用一个特殊的标记 .PHONY 来显式地指明一个目标是 "伪目标",向 make 说明,不管是否有这个文件/文件夹,这个目标就是 "伪目标"
.PHONY : clean
4.Makefile 的变量
变量在声明时需要给予初值,而在使用时,需要给在变量名前加上 $ 符号,并用小括号 () 把变量给包括起来。
cpp := src/main.cpp
obj := objs/main.o
$(obj) : ${cpp}
@g++ -c $(cpp) -o $(obj)
compile : $(obj)
5.预定义变量
$@: 目标(target)的完整名称
$<: 第一个依赖文件(prerequisties)的名称
$^: 所有的依赖文件(prerequisties),以空格分开,不包含重复的依赖文件