请教一个Makefile的问题,就是如何从多个.o文件生成目标文件?
答案:2 悬赏:60 手机版
解决时间 2021-03-06 08:40
- 提问者网友:孤山下
- 2021-03-06 02:45
请教一个Makefile的问题,就是如何从多个.o文件生成目标文件?
最佳答案
- 五星知识达人网友:往事隔山水
- 2021-03-06 03:05
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那三行就行了。
全部回答
- 1楼网友:人间朝暮
- 2021-03-06 04:10
推荐看下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
临渊羡鱼不如退而结网!追问看了一些教程,太长,感觉看到后边前边就忘,所以想在实践中慢慢积累,你就以这个具体问题教教俺嘛,我住文件夹里有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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯