- 引入static Pattern Rule
targets:target-pattern:prereq-patterns
# targets不是一个目标文件,而是一组目标文件
# target-pattern表示目标文件的特征%.o
# prereq-patterns表示依赖文件的特征%.cpp
- 引入wildcard函数,patsubst函数
- wildcard用于获取符合特定规则的文件名
$(wildcard ****.cpp) # 过来所有的.cpp文件
- patsubst用于文本处理
$(patsubst %.cpp, %.o, $(SOURCES)) # 将SOURCE表示的所有.cpp文件替换为同名的.o文件
- 引入特殊符号,精简makefile
- all:library.cpp main.cpp
$@指代all,即target
$<指代library.cpp, 即第一个dependency
$^指代library.cpp和main.cpp,即所有的dependency
- 使用变量,变量名允许自定义(抽象功能)
- 语法规则::
- 有选择性的编译源文件:即增量编译
- makefile文件名敏感,可以为makefile或者Makefile(仅两种写法),不能为其他版本(MakeFile, Make_File, makeFile,...)
- makefile缩进敏感,在行首为,不能随便打空格
- all, clean为target,名称可自定义,真正编译的是他们下面的命令
- 执行为make target,默认第一个target