看一下这个你就懂了https://blog.csdn.net/qq1452008/article/details/50855810
看了 第009课_gcc和arm-linux-gcc和Makefile 好几遍依然无法理解,在include了依赖文件进来之后,为什么就可以检测到.h的修改了。具体疑问如下
第一种写法:
c.o : c.c c.h
在第一种写法中,表明了c.o 依赖于c.h,所以c.h有更新了, 他就会重新编译c.c,这个很好理解。
第二种写法
include $(dep_files)
%.o : %.c
gcc $(CFLAGS) -c -o $@ $< -MD -MF .$@.d
在第二种写法中,只是include了.d文件,提供了所依赖的.h是哪些,那.c依然没有更新呀,既然没有更新那他怎么会去再次执行下面的编译命令呢?
求解释。