#源文件目录 SRC_DIR := ./src #头文件目录 INC_DIR := ./include #输出文件目录 OUT_DIR := ./build #目标文件(中间文件)目录 OBJ_DIR :=./build #链接选项 LDFLAGS := $(shell pkg-config --static --libs glfw3) #编译工具链 CC := g++ #输出文件命名 OUT := $(OUT_DIR)/lab1 #增加所有头文件所在的目录 # INC_DIR += ./include/glad # INC_DIR += ./include/KHR #获取头文件目录 CPP_FLAGS := $(foreach dir, $(INC_DIR), -I$(wildcard $(dir))) #方法一: 将所有源文件的文件目录添加进来,就不用每增加一个文件都修改一下makefile文件 #SRC_DIR += ./src/ #获取所有cpp文件名 CPP_SRCS := $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.cpp)) #方法二:将增加的文件(带目录)增加到源文件数组中,此操作不用增加源文件目录 # CPP_SRCS += ./src/sub_path1/*.cpp # CPP_SRCS += ./src/sub_path2/*.cpp # CPP_SRCS += ./src/sub_path....../*.cpp # CPP_SRCS += ./src/sub_pathn/*.cpp #生成所有的目标文件名 OBJ := $(addprefix $(OBJ_DIR)/, $(notdir $(CPP_SRCS:.cpp=.o))) # 最终目标文件的生成(makefile 会将第一个target设为最终生成的目标文件 # 【当然这里可以不是可执行文件,它也可以是.o文件】),链接过程 # 这条语句的完全写法应该是: # ./OUT/xxx.OUT: prerequisites1.o prerequisites2.o prerequisites3.o ... # g++ prerequisites1.o prerequisites2.o prerequisites3.o ... -o ./OUT/xxx.OUT $(OUT):$(OBJ) $(CC) $^ -o $@ $(LDFLAGS) #将所有的.cpp文件加载到当前的路径中 vpath %.cpp $(sort $(dir $(CPP_SRCS))) #将所有的源文件编译生成响应的目标文件 $(OBJ_DIR)/%.o:%.cpp $(CC) $(CPP_FLAGS) -c $< -o $@ run:$(OUT) ./$(OUT) .PHONY:clean clean: rm -rf ./${OUT_DIR}/* rm -rf ./${OBJ_DIR}/*