Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Makefile,在src目录树中查找源代码,并在构建文件中编译为.o_C++_C_Makefile - Fatal编程技术网

C++ Makefile,在src目录树中查找源代码,并在构建文件中编译为.o

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

我目前正试图为我继承的项目重新编写一个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文件,并将它们编译到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)