页面

makefile中自动生成对头文件的依赖


一个目标文件经常依赖很多的头文件,且经常会有#inculde语句的添加与删除.
这样每次加了include后,还得改makefile. 这一步可以自动化, make的文档里有提到

从文档里提取的规则:
%.d: %.c
             @set -e; rm -f $@; \
              $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
              sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
              rm -f $@.$$$$


gcc的-M选项:

[tangyi@search043040.sqa.cm4 src]$ gcc -M object.c

object.o: object.c redis.h fmacros.h config.h /usr/include/stdio.h \
  /usr/include/features.h /usr/include/sys/cdefs.h \
  /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
  /usr/include/gnu/stubs-64.h \
  /usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/stddef.h \
  /usr/include/bits/types.h /usr/include/bits/typesizes.h \

object.d : object.c

经过sed处理一下会生成的规则:

object.o object.d : object.c redis.h fmacros.h config.h /usr/include/stdio.h \
  /usr/include/features.h /usr/include/sys/cdefs.h \
  /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
  /usr/include/gnu/stubs-64.h \
  /usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/stddef.h \
  /usr/include/bits/types.h /usr/include/bits/typesizes.h \