【求助】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
当以.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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28