1.格式 (三要素:目标 依赖 命令规则)
目标:依赖
TAB键 命令规则
默认make文件时处理的是第一个目标文件
具体处理指定目标 ,需要make指定 ,如make test (其中test就是指定目标)
- @在命令规则前代表不输出该条规则的命令
- -在命令规则前代表该条规则仍然继续运行
- .PHONY:伪目标,不与目录目标下的文件冲突
2. makefile中预定义的变量
- 自动变量:
$@, $^, $<...... - 特殊变量:
$(MAKE), $(MAKECMDGOALS), $(MAKEFILE_LIST)......
2.1 自动变量的含义
- $@ 代表目标
- $^ 代表全部依赖
- $< 代表第一个依赖
- $? 代表第一个变换的依赖
2.2 特殊变量的含义
$(MAKE)
:当前make解释器的文件名$(MAKECMDGOALS)
:命令行中指定的目标名(make的命令行参数)$(MAKEFILE_LIST)
:make所需要处理的makefile文件列表,当前makefile的文件名总是位于列表的最后,文件名之间以空格进行分隔$(MAKE_VERSION)
:当前make解释器的版本$(CURDIR)
:当前make解释器的工作目录$(.VARIABLES)
:所有已经定义的变量名列表(预定义变量和自定义变量)
如下面的obj
3函数
wildcard:通用符搜索
patsubst:替换
#get all .c files
SrcFiles=$(wildcard *.c)
#将获取的.c文件替换为.o文件名
SrcFiles1=$(patsubst %.c,%.o,$(SrcFiles))
obj=main.o add.o div.o
app:$(obj)
gcc -o app -I ./include $(obj)
main.o:main.c
gcc -c main.c -I ./include
add.o:add.c
gcc -c add.c -I ./include
div.o:div.c
gcc -c div.c -I ./include
test:
echo $(SrcFiles)
echo $(SrcFiles1)