目前,我有一个makefile设置,我在一个目录src
中编译所有cpp文件。它的结构如下
CCPP = g++
CPPFLAGS = -std=c++11
CPPLINK = -lstdc++
INC_DIR = include
CPP_FILES := $(wildcard src/*.cpp)
OBJ_FILES := $(addprefix lib/,$(notdir $(CPP_FILES:.cpp=.o)))
LD_FLAGS :=
CC_FLAGS := -c $(CPPFLAGS) -Wall -I$(INC_DIR)
bin/Xenon: $(OBJ_FILES) ; $(CCPP) $(LD_FLAGS) -o $@ $^
lib/%.o: src/%.cpp ; $(CCPP) $(CC_FLAGS) -c -o $@ $<
然而,虽然这有效,但我想将src分成cpp文件的多个子目录。
如何使此解决方案适用于单个src
文件夹下的任意数量的子目录?
注意:此处bin/Xenon
是一个带有main方法的CLI应用程序,INC_DIR是我所有头文件所在的位置。这也是OSX,而不是Windows。
答案 0 :(得分:2)
简单的部分是
CPP_FILES := $(wildcard src/*/*.cpp) # if all are in subdirectories
CPP_FILES := $(wildcard src/*.cpp src/*/*.cpp)
OBJ_FILES := $(patsubst src/%,lib/%,$(CPP_FILES:.cpp=.o))
如果您在多个目录中拥有相同的文件名,则不希望$(notdir)
。
您还必须担心制作lib
的相应子目录。最简单的方法可能是在写入时确保每个都存在:
lib/%.o: src/%.cpp
mkdir -p $(dir $@)
$(CCPP) $(CC_FLAGS) -c -o $@ $<