请教一个Makefile的问题,就是如何从多个.o文件生成目标文件? 50

比如我的目标是:default:${PROGRAM}我想这样:${PROGRAM}:${OBJDIR}/%.o他说依赖的.o不存在,可是生成.o的规则我在下边写了啊,难道... 比如我的目标是:
default:${PROGRAM}
我想这样:${PROGRAM}:${OBJDIR}/%.o
他说依赖的.o不存在,可是生成.o的规则我在下边写了啊,难道依赖的.o文件必须一个一个写出来么,如果源文件很多怎么办。。

总结来说就是,我有很多.c文件,我要生成这个工程,要生成中间的.o(这样有改动只要编译改动的就可以了,是吧。。),怎么写。。
展开
 我来答
guanwenchao2
2013-10-08 · TA获得超过143个赞
知道答主
回答量:46
采纳率:0%
帮助的人:18.4万
展开全部
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那三行就行了。
百度网友cae93b7
2013-09-30
知道答主
回答量:23
采纳率:0%
帮助的人:12.2万
展开全部
推荐看下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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式