C++ Makefile,在src目录树中查找源代码,并在构建文件中编译为.o
我目前正试图为我继承的项目重新编写一个makefile,以使源代码树更整洁,更易于使用。目前,源树是这样的:C++ Makefile,在src目录树中查找源代码,并在构建文件中编译为.o,c++,c,makefile,C++,C,Makefile,我目前正试图为我继承的项目重新编写一个makefile,以使源代码树更整洁,更易于使用。目前,源树是这样的: Project/ ----bin/ ----build/ ----include/ ----main.h ----part1.h ----part2.h ----part3.h ----src/ ----main.cpp ----part1.cpp ----Subdir/ ----part2
Project/
----bin/
----build/
----include/
----main.h
----part1.h
----part2.h
----part3.h
----src/
----main.cpp
----part1.cpp
----Subdir/
----part2.c
----Subdir2/
----part3.cpp
我想要的是在我的makefile中有一个规则,它将在我的src目录中找到所有的.cpp和.c文件,并将它们编译到build目录中的对象的平面目录中。目前,我的makefile中有以下内容,但这似乎遗漏了一些cpp文件:
BUILDDIR = build
$(BUILDDIR)/%.o : src/**/%.cpp | $(BUILDDIR)
$(BUILDDIR)/%.o : src/%.cpp | $(BUILDDIR)
$(CXX) $(CFLAGS) -c $< -o $@ $(INCS)
$(BUILDDIR)/%.o : src/**/%.c | $(BUILDDIR)
$(BUILDDIR)/%.o : src/%.c | $(BUILDDIR)
$(CC) $(CFLAGS) -c $< -o $@ $(INCS)
BUILDDIR=build
$(BUILDDIR)/%.o:src/**/%.cpp |$(BUILDDIR)
$(BUILDDIR)/%.o:src/%.cpp |$(BUILDDIR)
$(CXX)$(CFLAGS)-c$<-o$@$(INCS)
$(BUILDDIR)/%.o:src/**/%.c |$(BUILDDIR)
$(BUILDDIR)/%.o:src/%.c |$(BUILDDIR)
$(CC)$(CFLAGS)-c$<-o$@$(INCS)
当我运行make-n时,它似乎检测到main.cpp和part1.cpp,但在子目录中没有检测到它们。Make然后继续尝试根据Makefile中的稍后规则加载文件
由于项目中的文件数量较多,我不想手动编写它们的列表,但如果要这样做,我可能不得不这样做。Make的功能可能会对您有所帮助
另见
可以使用源文件显式定义目录。例如:
DIRS = src src/subdir1 src/subdir2
SEARCHC = $(addsuffix /*.c ,$(DIRS))
SEARCHCPP = $(addsuffix /*.cpp ,$(DIRS))
SRCS = $(wildcard $(SEARCHC))
SRCS += $(wildcard $(SEARCHCPP))
要让make
查找源文件并将其添加到Makefile中,请执行以下操作:
vpath %.c $(DIRS)
vpath %.cpp $(DIRS)
help:
@echo 'Sources:'
@echo $(SRCS)
我还使用special target检查我的Makefile:
vpath %.c $(DIRS)
vpath %.cpp $(DIRS)
help:
@echo 'Sources:'
@echo $(SRCS)