我正在尝试将目标文件(.o文件)生成到单独的文件夹中。它运作良好。问题是生成的目标文件没有放入我想要的文件夹中。以下是我的makefile:
OBJDIR :=objdir
SOURCES=$(wildcard ./src/*.c)
OBJS=$(patsubst %.c, %.o, $(SOURCES))
vpath %.h ./src
vpath %.c ./src
optest : $(OBJS)
cc -o optest $(OBJS)
$(OBJDIR)/main.o : add.h mul.h did.h
$(OBJDIR)/add.o : add.h
$(OBJDIR)/mul.o : mul.h
$(OBJDIR)/did.o : did.h
$(OBJS): | $(OBJDIR)
$(OBJDIR):
mkdir $(OBJDIR)
clean :
rm -rf $(OBJDIR)
rm -f optest
我的.h和.c文件放在./src
文件夹中。上面makefile的结果是所有目标文件也放在./src
文件夹而不是objdir
文件夹中。任何人都可以提出任何建议吗?
答案 0 :(得分:1)
两个问题:您没有正确替换源文件,而隐式编译规则仅适用于具有匹配路径的对象和源。
objdir := objdir
sources := $(wildcard src/*.c)
objs := $(sources:src/%.c=$(objdir)/%.o)
deps := $(objs:.o=.d)
CPPFLAGS := -MMD -MP
.PHONY: clean
optest: $(objs)
$(LINK.o) $^ $(LDLIBS) -o $@
$(objs): $(objdir)/%.o: src/%.c | $(objdir)
$(COMPILE.c) $(OUPUT_OPTION) $<
$(objdir): ; mkdir $@
clean: ; $(RM) $(objs) $(deps) optest
-include $(deps)
其他东西:
.PHONY
。