#源文件目录
SRC_DIR := ./src
#头文件目录
INC_DIR := ./include
#输出文件目录
OUT_DIR := ./build
#目标文件(中间文件)目录
OBJ_DIR :=./build
#链接选项
LDFLAGS := $(shell pkg-config --static --libs glfw3)
#编译工具链
CC := g++
#输出文件命名
OUT := $(OUT_DIR)/hello
#增加所有头文件所在的目录
# 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 $@
nv:$(OUT)
prime-run ./$(OUT)
run:$(OUT)
./$(OUT)
all:$(OUT)
.PHONY:clean
clean:
rm -rf ./${OUT_DIR}/*
rm -rf ./${OBJ_DIR}/*