修改生成文件以包含子目录

Modify the makefile to include subdirectories

本文关键字:包含 子目录 文件 修改      更新时间:2023-10-16

我正在使用一个 c++ 的小程序来学习 makefile。

该程序有 2 个源文件(main.cpp 和 classf.cpp)和一个头文件 (classf.h)。所有文件都包含在称为"testmake"的项目目录中。这是日食在风浪上生成的生成文件:

CXXFLAGS =  -O2 -g -Wall -fmessage-length=0
OBJS =  main.o classf.o
LIBS =
TARGET =    createPddl.exe
$(TARGET):  $(OBJS)
    $(CXX) -o $(TARGET) $(OBJS) $(LIBS)
all:    $(TARGET)
clean:
    rm -f $(OBJS) $(TARGET)

我想修改makefile以接受新的子目录,例如,当我添加一个名为"testmake/src"的文件夹并将文件main.cpp移动到其中时,名为"testmake/csource"的文件夹并将classf.cpp移动到其中,并创建一个名为"testmake/cheader"的文件夹并将classf.h移动到其中。

此生成文件由 eclipse 自动生成,不接受任何更改。在那里,我手动创建了一个 make 文件,该文件适用于任何结构为树的 c++ 项目。

我实际上一般都使用这个制作文件

CC := g++ # This is the main compiler
SRCDIR := src
BUILDDIR := build
TARGETDIR :=bin/
TARGET := pddlcrate
DATADIR := data 
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
CFLAGS := -g # -Wall
#LIB := -pthread -lmongoclient -L lib -lboost_thread-mt -lboost_filesystem-      
mt -lboost_system-mt
INC := -I include
$(TARGET): $(OBJECTS)
    @echo " Linking..."
    @echo " $(CC) $^ -o $(TARGETDIR)$(TARGET) $(LIB)"; $(CC) $^ -o     
$(TARGETDIR)$(TARGET) $(LIB)
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
    @mkdir -p $(BUILDDIR)
    @echo " $(CC) $(CFLAGS) $(INC) -c -o $@ $<"; $(CC) $(CFLAGS) $(INC) -c -  o $@ $<
clean:
    @echo " Cleaning..."; 
    @echo " $(RM) -r $(BUILDDIR) $(TARGET)"; $(RM) -r $(BUILDDIR) $(TARGET)

对于具有此树结构的任何 C++ 项目

$ tree .
├── Makefile
├── bin
    >exefile
├── include
   > *.h   files
├── obj
   > *.o files
├── src
    >*.cpp