2015-07-11 224 views
2

我想要創建對象創建所需的所有目錄。這裏是我的項目結構:爲子目錄創建Makefile目錄

Project/ 
    src/ 
     main.cc 
     graphics/ 
      window.h 
      window.cc 
     math/ 
      vec3.h 
      vec3.cc 
    Makefile 

這裏是我的Makefile:

CXX = g++ 
CXXFLAGS = -Wall -Wno-write-strings -std=c++11 
LDLIBS = -lglfw3 -lGLEW -lGLU -lGL -lX11 -lXi -lXrandr -lXxf86vm -lXinerama -lXcursor -lpthread 

SRC_DIR = src/ src/graphics/ src/math/ 
OBJ_DIR = bin 
LIB_DIR = -L/usr/lib 
INC_DIR = -L/usr/include 

SOURCE = $(wildcard $(SRC_DIR)/*.cc) 
OBJECTS = ${SOURCE:%.cc=$(OBJ_DIR)/%.o} 
EXECUTABLE = application 

all: init $(OBJECTS) $(EXECUTABLE) 

${EXECUTABLE}: $(OBJECTS) 
    $(CXX) $(LDFLAGS) $(LIB_DIR) -o [email protected] $(OBJECTS) $(LDLIBS) 

$(OBJ_DIR)/%.o: %.cc 
    $(CXX) $(INC_DIR) -c $< -o [email protected] 

init: 
    @echo $(SRC_DIR) 
    @echo $(OBJ_DIR) 
    mkdir -p "$(addprefix $(OBJ_DIR)/,$(SRC_DIR))" 

clean: 
    rm -rf $(OBJ_DIR) $(EXECUTABLE) 

我想創建binbin/src/bin/src/graphicsbin/src/math目錄。

在目標init我已經完成mkdir -p "$(OBJ_DIR)/$(SRC_DIR)"但只創建bin/src src/graphics src/math而不是bin/src bin/src/graphics/ bin/src/math。如何將bin前綴添加到我要創建的文件夾中?

+0

林還學習如何編寫makefile文件。也許你可以看看我的Q和[這個答案](http://stackoverflow.com/a/25086511/3087952)。這是[我目前的makefile](http://stackoverflow.com/questions/31329581/error-flood-when-compiling-simple-hello-world-program)。 – nonsensation

回答

2

使用foreach

init: 
    $(foreach d, $(SRC_DIR), mkdir -p $(addprefix $(OBJ_DIR)/,$(d));) 
+0

我這樣做了,make命令的輸出顯示了正在創建的那些目錄。但是當我真正打開這些文件夾時,我發現創建的目錄不是'bin/src/math',而是'bin/src/bin/src/graphics bin/src/math' makefile顯然不理解這是一個列表並使用整個列表一次創建目錄。 –

+0

我相信你跳過了一些涉及SRC_DIR的食譜。除了'init'目標外,沒有人使用SRC_DIR。這是設計嗎? –

+0

我用我當前的Makefile編輯了這個問題。我相信'SRC_DIR = src src/graphics src/math'部分是錯誤的,但我不知道如何將它變成列表。你可以看看嗎? –