加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

自动生成依赖关系的Makefile实例

发布时间:2020-05-23 12:10:59 所属栏目:程序设计 来源:互联网
导读:最近研究Makefile,以下列出两个利用编译器自动生成文件依赖关系的Makefile例子: 第一个例子 #最终要生成的可执行文件名称 TARGET = test #目标文件的集合及存储的位置 OBJNAME = main.o dlist.o OBJDIR = ./obj DEPENDDIR = ./depend #C编译器及编译参数 CC

最近研究Makefile,以下列出两个利用编译器自动生成文件依赖关系的Makefile例子:

第一个例子

#最终要生成的可执行文件名称
TARGET = test
#目标文件的集合及存储的位置
OBJNAME = main.o dlist.o
OBJDIR = ./obj
DEPENDDIR = ./depend
#C编译器及编译参数
CC = gcc
CFLAGS = -Wall -g
#C连接器及连接参数
LD = gcc
LDFLAGS =

.PHONY:all clean
all: $(TARGET)

#默认启动调试模式
$(TARGET):$(OBJNAME)
$(LD) $(LDFLAGS) -o $@ $^
clean:
rm -f $(TARGET) $(OBJNAME) ./*.d
include $(OBJNAME:.o=.d)
%.d: %.c
set -e; rm -f $@;
$(CC) -MM $(CPPFLAGS) $< > $@.$$$$;
sed 's,($*).o[ :]*,1.o $@ :,g' < $@.$$$$ > $@;
rm -f $@.$$$$


第二个例子

#最终要生成的可执行文件名称
TARGET = test
#目标文件的集合及存储的位置
OBJS = dir/main.o dir/dlist.o
OBJDIR = obj
DEPENDDIR = depend
#C编译器及编译参数
CC = gcc
CFLAGS = -Wall -g
#C连接器及连接参数
LD = gcc
LDFLAGS =

.PHONY:all clean
all: $(TARGET)

#默认启动调试模式
$(TARGET):$(subst dir,$(OBJDIR),$(OBJS))
$(LD) $(LDFLAGS) -o $@ $^
clean:
rm -f $(TARGET) $(subst dir,$(OBJS)) $(DEPENDDIR)/*.d
include $(subst .o,.d,$(subst dir,$(DEPENDDIR),$(OBJS)))
$(DEPENDDIR)/%.d: %.c
@set -e; rm -f $@;
$(CC) -MM $(CPPFLAGS) $< > $@.$$$$;
sed 's,$(OBJDIR)/1.o $@ :,g' < $@.$$$$ > $@;
rm -f $@.$$$$ $(OBJDIR)/%.o:%.c $(COMPILE.c) $(OUTPUT_OPTION) $<

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读