1. makefile中的include
关键字
- 类似C语言中的
include
- 将其他文件的内容原封不动地搬入当前文件
- make对
include
关键字的处理方式:在当前目录搜索或指定目录搜索目标文件:
1)搜索成功:将文件内容搬入当前makefile中
2)搜索失败:产生警告,以文件名作为目标查找并执行对应规则,当文件名对应的规则不存在时,最终产生错误
2. makefile中命令的执行机制
- 规则中的每个命令默认是在一个新的进程中执行(Shell)
- 可以通过接续符(
;
)将多个命令组合成一个命令 - 组合的命令依次在同一个进程中被执行
-
set -e
指定发生错误后立即退出执行
.PHONY : test
test :
@set -e; \
mkdir test; \
cd test; \
mkdir subtest
3. 解决方案得初步思路
1)通过gcc -MM
和sed
得到.dep
依赖文件(目标的部分依赖) 技术点:规则中命令的连续执行
2)通过include
指令包含所有的.dep
依赖文件 技术点:当.dep
依赖文件不存在时,使用规则自动生成
.PHONY : all
MKDIR := mkdir
RM := rm -rf
CC := gcc
SRCS := $(wildcard *.c)
DEPS := $(SRCS:.c=.dep)
-include $(DEPS)
all :
@echo "all"
%.dep : %.c
@echo "Creating $@ ..."
@set -e; \
$(CC) -MM -E $^ | sed 's,\(.*\)\.o[ :]*,objs/\1.o : ,g' > $@
clean :
$(RM) $(DEPS)
声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件和《专业嵌入式软件开发》所有!