第一次编写makefile文件,这里做一个简单的记录
#---------------------------------------------------------------
#整个执行规则 all在最前 首先执行他的依赖
#app 的依赖是找Objfiles .o文件 执行%.o:%.c
#生成了.o规则 然后执行app: gcc -o $@ -I./include $(ObjFiles)
#-----------------------------------------------------------------
#get all *.c files
SrcFile=$(wildcard *.c)
#all *.c files to *.ofiles
ObjFiles=$(patsubst %.c,%.o,$(SrcFile))
#all伪目标 app是他的依赖 没有写规则
all:app
#目标文件用法
app:$(ObjFiles)
gcc -o $@ -I./include $(ObjFiles)
#模式匹配规则,$@,$<这样的变量,只能在规则中出现
%.o:%.c
gcc -c $< -I./include -o $@
#echo 输出
test:
echo $(SrcFile)
@echo $(ObjFiles)
#定义伪目标,防止有歧义 比如当前文件夹有文件为clean 不执行
.PHONY:clean all
# make clean 调用 rm---
# -@rm -f *.o -@含义
# @在规则前表示不输出该条规则
#-在规则前表示该规则报错 仍然继续执行
clean:
-@rm -f *.o
rm -f app
命令解析
wildcard 可以进行文件匹配
patsubst 内容的替换
$@ 代表目标
$^ 代表全部依赖
$< 第一个依赖
$? 第一个变化的依赖
@在规则前表示不输出该条规则
-在规则前表示该规则报错 仍然继续执行