2016-01-22 200 views
0

我正在用C++中的一个小程序来学习makefile。修改makefile以包含子目录

该程序有2个源文件(main.cpp和classf.cpp)和一个头文件(classf.h)。所有文件都包含在名为“testmake”的项目目录中。这是windlows生成的makefile文件的日食:

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目录”文件夹,移动文件为主。 cpp文件夹,名为“testmake/csource”的文件夹,并将其移动到其中,并创建一个名为“testmake/cheader”的文件夹,并将其中的classf.h移动。

+0

对文件的任何C++项目编译我想这个问题有答案:HTTP://计算器.com/questions/3774568/makefile-issue-smart-way-to-scan-directory-tree-for-c-files,但是我建议不要将包含* .h文件的所有路径全部添加到包含文件夹列表中 – PeterT

+0

你想让对象文件('main.o'和'classf.o')去吗? – Beta

+0

到一个名为build的文件夹,并将该可执行文件放到名为bin的文件夹中,并且我需要考虑在名为include的文件夹中的头文件 –

回答

0

这个makefile是由eclipse自动生成的,并且不接受任何改变。在那里,我已经手动创建了一个make文件,该文件与具有树结构的任何C++项目一起工作。

实际上我用这个Makefile一般

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 [email protected] $<"; $(CC) $(CFLAGS) $(INC) -c - o [email protected] $< 

clean: 
    @echo " Cleaning..."; 
    @echo " $(RM) -r $(BUILDDIR) $(TARGET)"; $(RM) -r $(BUILDDIR) $(TARGET) 

与此树形结构

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