2016-01-22 76 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