请教一个Makefile的问题,就是如何从多个.o文件生成目标文件? 50
比如我的目标是:default:${PROGRAM}我想这样:${PROGRAM}:${OBJDIR}/%.o他说依赖的.o不存在,可是生成.o的规则我在下边写了啊,难道...
比如我的目标是:
default:${PROGRAM}
我想这样:${PROGRAM}:${OBJDIR}/%.o
他说依赖的.o不存在,可是生成.o的规则我在下边写了啊,难道依赖的.o文件必须一个一个写出来么,如果源文件很多怎么办。。
总结来说就是,我有很多.c文件,我要生成这个工程,要生成中间的.o(这样有改动只要编译改动的就可以了,是吧。。),怎么写。。 展开
default:${PROGRAM}
我想这样:${PROGRAM}:${OBJDIR}/%.o
他说依赖的.o不存在,可是生成.o的规则我在下边写了啊,难道依赖的.o文件必须一个一个写出来么,如果源文件很多怎么办。。
总结来说就是,我有很多.c文件,我要生成这个工程,要生成中间的.o(这样有改动只要编译改动的就可以了,是吧。。),怎么写。。 展开
2个回答
展开全部
CC := ${CC}
CFLAG+=-c -o
BINDIR=../bin
OBJDIR=../obj
SRCLIST = $(wildcard *.c)
OBJLIST = $(SRCLIST:%.c=$(OBJDIR)/%.o)
TARGET=main \ 把main和Checkdate换成你自己想生成的程序名,
Checkdate 多个程序的话,记得写上\这个符号
TARGET:=$(TARGET:%=$(BINDIR)/%)
all: Makefile.obj $(TARGET)
Makefile.obj: $(SRCLIST)
$(CC) $(SRCLIST) > $@
include Makefile.obj
OBJS=xx.o yy.o 把生成main程序的.o文件依赖写在这里,替换xx.o、yy.o,
$(BINDIR)/main: $(OBJS:%=$(OBJDIR)/%) 替换main
$(CC) -o $@ $^
OBJS=aa.o cc.o 把生成Checkdate程序的.o文件依赖写在这里,替换aa.o、cc.o,$(BINDIR)/Checkdate: $(OBJS:%=$(OBJDIR)/%) 替换Checkdate
$(CC) -o $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(CC) $(CFLAG) $@ $<
这样写Makefile就行了,如果有更多的可执行程序要生成,就增加TARGET下可执行程序名,增加OBJS那三行就行了。
CFLAG+=-c -o
BINDIR=../bin
OBJDIR=../obj
SRCLIST = $(wildcard *.c)
OBJLIST = $(SRCLIST:%.c=$(OBJDIR)/%.o)
TARGET=main \ 把main和Checkdate换成你自己想生成的程序名,
Checkdate 多个程序的话,记得写上\这个符号
TARGET:=$(TARGET:%=$(BINDIR)/%)
all: Makefile.obj $(TARGET)
Makefile.obj: $(SRCLIST)
$(CC) $(SRCLIST) > $@
include Makefile.obj
OBJS=xx.o yy.o 把生成main程序的.o文件依赖写在这里,替换xx.o、yy.o,
$(BINDIR)/main: $(OBJS:%=$(OBJDIR)/%) 替换main
$(CC) -o $@ $^
OBJS=aa.o cc.o 把生成Checkdate程序的.o文件依赖写在这里,替换aa.o、cc.o,$(BINDIR)/Checkdate: $(OBJS:%=$(OBJDIR)/%) 替换Checkdate
$(CC) -o $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(CC) $(CFLAG) $@ $<
这样写Makefile就行了,如果有更多的可执行程序要生成,就增加TARGET下可执行程序名,增加OBJS那三行就行了。
展开全部
推荐看下Makefile的书籍,这个其实很简单!
临渊羡鱼不如退而结网!
临渊羡鱼不如退而结网!
追问
看了一些教程,太长,感觉看到后边前边就忘,所以想在实践中慢慢积累,你就以这个具体问题教教俺嘛,我住文件夹里有src,obj,bin三个子文件夹,src里有50个.c源文件,怎么在obj对应生成.o,再链接成一个目标文件在bin。。
追答
时间有限,有点忘了,在家没有调试环境,先这样写下,你分析下,应该是没有问题,具体的在linux下面运行下,看下结果,学会debug,如果什么不明白,一起探讨...
SRC=$(wildcard src/*.c)
TARGET=last
CC=gcc
OBJS=$(addsuffix .o,$(basename $(SRC)))
.PHONY:all
all:$(OBJS)
$(CC)$(OBJS) -o bin/$(TARGET)
$(OBJS):$(SRC)
$(CC) -c $*.c -o obj/$*.o
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询