为子目录创建Makefile目录

时间:2015-07-11 16:09:32

标签: c++ build 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 $@ $(OBJECTS) $(LDLIBS)

$(OBJ_DIR)/%.o: %.cc
    $(CXX) $(INC_DIR) -c $< -o $@

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前缀添加到我正在创建的文件夹中?

1 个答案:

答案 0 :(得分:2)

使用foreach

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