我常用的makefile之产生优秀的.depend文件

注:以下文件的.depend文件相应后缀为.d,即xxx.c的.depend文件为xxx.d。

 

直接用gcc -MM产生的.depend文件形如:

test.o : test.c test.h

这样有个坏处,就是当 test.c 文件改变时,.depend文件仍然没变。若新的 test.c 中增加了头文件,则这个头文件并不会在依赖关系中(.dpend文件没变嘛)。所以要把.depend文件和其关联上。即变为

test.o test.d: test.c test.h

实现上面的转换用到了sed。
原理说了,下面就直接贴makefile了
 
 
ARCH=arm
ifeq ($(ARCH), arm)
CC=arm-hisiv200-linux-gcc
AR=arm-hisiv200-linux-ar
AS=arm-hisiv200-linux-as
LD=arm-hisiv200-linux-ld
CPP=arm-hisiv200-linux-g++
CP = cp
else
CC=gcc
AR=ar
AS=as
LD=ld
CPP=g++
CP=cp
endif
 
SRC:=
OBJ:=
 
SRC += $(wildcard ../*.c)
OBJ += $(patsubst %.c, %.o, $(notdir $(SRC)))
 
RULES_OBJ := $(patsubst %.c, %.d, $(filter %.c, $(SRC)))
 
TARGET_LIB=libvod.a
 
VPATH += ../
 
CFLAGS = -Wall -g
LDFLAGS = -lpthread
 
CPPFLAGS += -I../../../include/vod
 
all:$(OBJ)
 $(AR) ruv $(TARGET_LIB) $(OBJ)
 mv $(TARGET_LIB) ../
 

#产生.d文件
%.d: %.c
 $(CC) -MM $(CPPFLAGS) $< | sed -e 's/^\(.*\)\.o/\1\.o \1\.d/' > $@
 
%.o: %.c
 $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
 
clean:
 -rm -f $(OBJ)
 @-rm -f ../$(TARGET_LIB)
 @-rm -f *~ .*swp a.out
 @-rm -f *.o
 @-rm -f *.s
 
.PHONY:clean
 
include $(RULES_OBJ)
 
 
 
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值