Makefile未编译目录中的所有C文件
我在Windows平台上与gcc和MinGW合作。我有一个包含两个*.c文件的目录: main.c和funcs.c 我正在使用以下生成文件: 当然,后面是一堆多个定义错误。从前两行可以看出,它使用相同的*.c文件,并将其编译两次为两个不同的*.o文件 我不熟悉makefile,但我认为我的$(OBJECTS)规则有问题,我很确定是$<导致了这个问题。我正在尝试创建一个通用的makefile,它将始终在具有相同目录结构的项目上工作,并将.c文件转换为.o文件和链接。我这样做是完全错误的还是对我的makefile有一个简单的修复 谢谢 詹姆斯这条规则:Makefile未编译目录中的所有C文件,c,gcc,makefile,mingw,C,Gcc,Makefile,Mingw,我在Windows平台上与gcc和MinGW合作。我有一个包含两个*.c文件的目录: main.c和funcs.c 我正在使用以下生成文件: 当然,后面是一堆多个定义错误。从前两行可以看出,它使用相同的*.c文件,并将其编译两次为两个不同的*.o文件 我不熟悉makefile,但我认为我的$(OBJECTS)规则有问题,我很确定是$
$(OBJECTS): $(SOURCES)
$(CC) $(INC) $(CFLAGS) $< -o $@
参见Jeff在回答中指出了错误(所有对象都依赖于所有源:这不是c源的通用编译规则) 但是,通用规则必须具有源和对象路径。总而言之,只要替换
$(OBJECTS): $(SOURCES)
$(CC) $(INC) $(CFLAGS) $< -o $@
$(对象):$(源)
$(CC)$(INC)$(CFLAGS)$<-o$@
借
$(BUILDDIR)/%.o:$(SOURCEDIR)/%.c
$(CC)$(INC)$(CFLAGS)$<-o$@
(如中所述)
请注意,这种依赖性测试不考虑包含的.h
文件,因此它只适用于第一次构建。之后修改.h
文件不会触发编译,因为头文件未作为依赖项列出
$(OBJECTS): $(SOURCES)
$(CC) $(INC) $(CFLAGS) $< -o $@
funcs.o main.c: funcs.c main.c
$(CC) $(INC) $(CFLAGS) $< -o $@
funcs.o: funcs.c main.c
$(CC) $(INC) $(CFLAGS) $< -o $@
main.o: funcs.c main.c
$(CC) $(INC) $(CFLAGS) $< -o $@
%.o: %.c
$(CC) $(INC) $(CFLAGS) $< -o $@
$(OBJECTS): $(SOURCES)
$(CC) $(INC) $(CFLAGS) $< -o $@
$(BUILDDIR)/%.o : $(SOURCEDIR)/%.c
$(CC) $(INC) $(CFLAGS) $< -o $@