# 项目根目录 TOP_DIR:=$(patsubst %/, %, $(dir $(abspath $(lastword $(MAKEFILE_LIST))))) export TOP_DIR # 各项目录 BUILD_DIR:=$(TOP_DIR)/build BIN_DIR:=$(BUILD_DIR)/bin export BUILD_DIR PROJECT_ROOT= /mnt/data/cmhu/FFNvDecoder DEPEND_DIR = $(PROJECT_ROOT)/bin SRC_ROOT = $(PROJECT_ROOT)/src THIRDPARTY_ROOT = $(PROJECT_ROOT)/3rdparty SPDLOG_ROOT = $(THIRDPARTY_ROOT)/spdlog-1.9.2/release #编译器 CXX:=g++ CXXFLAGS:=-std=c++11 -Wall -Wextra -Og -g INCS:=-I $(TOP_DIR) \ -I $(SPDLOG_ROOT)/include \ MACROS:= export CXX CXXFLAGS INCS MACROS # 链接器 LD:=g++ LDFLAGS:= LIBS:= -L $(SPDLOG_ROOT)/lib -l:libspdlog.a \ # 各个模块 MODULES:= nvdec gb28181 interface demo # 各个模块对应的库 # MODULE_LIBS:=$(BUILD_DIR)/nvdec/lib/nvdec.a\ # $(BUILD_DIR)/nvdec/lib/gb28181.a\ # $(BUILD_DIR)/interface/lib/interface.a\ # 最终目标文件 TARGET:=$(BIN_DIR)/test # 默认最终目标 .PHONY:all all:$(TARGET) # 最终目标依赖关系 $(TARGET):FORCE | $(BIN_DIR) @for n in $(MODULES); do make -s -f $(TOP_DIR)/$$n/Makefile MODULE=$$n || exit "$$?"; done @echo -e "\e[32m""Linking executable $(TARGET)""\e[0m" #@$(LD) $(LDFLAGS) -o $@ $(MODULE_LIBS) $(LIBS) # 若没有bin目录则自动生成 $(BIN_DIR): @mkdir -p $@ # 强制执行命令 .PHONY:FORCE FORCE: # make clean直接删除整个build目录 .PHONY:clean clean: @rm -rf $(BUILD_DIR)