我目前正在尝试为我继承的项目重写 makefile,以使源代码树更整洁、更易于使用。目前源树是这样的:
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 文件,并将它们编译到构建目录中的对象的平面目录。目前我的 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)
当我运行 make -n 时,它似乎已检测到 main.cpp 和 part1.cpp,但没有检测到子目录中的任何一个。然后 Make 继续尝试根据 Makefile 中后面的规则加载文件。
由于项目中的文件数量较多,我不想手动编写它们的列表,但如果真的需要的话,我可能不得不这样做。
最佳答案
您可以使用源文件显式定义目录。例如:
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)
我还使用特殊目标来检查我的 Makefile:
help:
@echo 'Sources:'
@echo $(SRCS)
关于c++ - Makefile,在src目录树中查找源代码并在构建文件中编译为.o,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163301/