+ -
当前位置:首页 → 问答吧 → 【求助】makefile文件编译依赖关系的一个问题

【求助】makefile文件编译依赖关系的一个问题

时间:2011-10-03

来源:互联网

最近在使用makefile中碰到一个问题,简要描述如下(以test.c为例):

当以.d文件作为依赖关系时,当.c文件删除一个头文件包含时,会报编译错误。

具体描述: 
test.c的内容为:
#include "test.h"
#include "test1.h"
/*
之后为程序内容。
*/
 
 
在由test.c生成的test.d内容为:
 
test.d tset.o: test.c test.h test1.h
 
现在因为代码变化,把test.c文件中所包含的“test1.h”去掉,同时在目录下也把test1.h这个文件删掉了,即新的 
test.c的内容为:
#include "test.h"
/*
之后为程序内容。
*/
 
但是,执行makefile去生成新的可执行文件时会报错,提示信息为:找不到test1.h。我看了下,是因为老的test.d中有test1.h这个依赖关系,但此文件已删除了,故找不到而报错退出,使编译不能继续下去。

我现在的临时办法是把这个test.d删除,再执行makefile,就能通过。我感觉这样做太不智能了,在实际的项目中有很多文件,若删除一个头文件就要手动删除此文件的.d文件,那也太麻烦了。


附(我使用的makefile):
 
SRC = $(wildcard *.c)
TARGET = $(patsubst %.c, %, $(SRC))
DEPEND = $(patsubst %.c, %.d, $(SRC))
 
CC = gcc
CFLAGS = -Wall -g
 
%.o:%c
  $(CC) $(CFLAGS) -c -o $@ $<
 
%:%.o
  $(CC) -o $@ $<
  @-rm -f $<
 
all:$(TARGET)
 
%.d: %c
  @$(CC) -MM $< > [email protected]
  @sed 's/\(.*\).o: \(.*\)/\1.d \1.o: \2/1' [email protected] > $@
  @-rm -f [email protected]
 
include $DEPEND
 
clean:
  -rm -f $(TARGET)
  @-rm -f *~ .*swp a.out
  @-rm -f *.o
  @-rm -f *.s
 
.PHONY:clean all

作者: lj20040431   发布时间: 2011-10-03

虽然语法不是问题,但实在不知道.d是什么。。。

作者: qq120848369   发布时间: 2011-10-03

要不你在make clean当中做 rm *.d ?

作者: cqbamboo   发布时间: 2011-10-03

相关阅读 更多