makefile专题:自动生成依赖关系(中)

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 -MMsed得到.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)

声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件《专业嵌入式软件开发》所有!

你可能感兴趣的:(makefile专题:自动生成依赖关系(中))