随笔-156  评论-223  文章-30  trackbacks-0
  在GNU make中文手册这本书中,3.14节讲到了依赖文件的自动生成,如下图


  图中的规则对C源文件和Makefile在同一目录,是正确的。但是不在同一目录的又希望依赖文件在对应的目录下,比如src/log/log_file.c,希望依赖文件log_file.d生成在src/log/下。因为gcc(aix平台xlc编译器亦如此)生成的依赖文件内容中目标文件名没有带路径,例如下所示
log_file.o: src/log/log_file.c src/log/log_file.h src/log/log_type.h \
 src/log/../base/io_ext.h

  所以sed就找不到src/log/log_file.o而替换了,改正后的规则如下
%.d: %.c
    $(CC) $(CFLAGS) $(INCS) $< $(MFLAGS) $@.$$$$;\
    sed 's,$(*F).o[ :]*,$*.o $@: ,g' < $@.$$$$ > $@;\
    $(RM) $@.$$$$

  该规则对C源文件和Makefile在同一目录也适合,生成后的依赖文件内容如下
src/log/log_file.o src/log/log_file.d: src/log/log_file.c src/log/log_file.h src/log/log_type.h \
 src/log/../base/io_ext.h
posted on 2018-11-16 12:08 春秋十二月 阅读(836) 评论(0)  编辑 收藏 引用 所属分类: System

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理