Makefile template

复制代码
# compile
COMPILER = g++
COMPILE_STD_OPTIONS = -std=c++11
COMPILE_WARN_OPTIONS = -Wall
COMPILE_DEBUG_OPTIONS = -g -O0
 
# marrco
MARRCOS = 
 
# directory
SRC_DIR = .
INCLUD_DIR = .
			
STATIC_LIB_DIR = lib
			

SHARED_LIB_DIR = lib 

OUTPUT_DIR = output

# file
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
SRCS = $(notdir $(SRC_FILES))
OBJ_FILES = $(SRCS:.cpp=.o)
DEP_FILES = $(SRCS:.cpp=.d)
SRC_OBJ_FILES = $(SRC_FILES:.cpp=.o)
OBJ_OUTPUT_FILES = $(addprefix $(OUTPUT_DIR)/,$(OBJ_FILES))
DEP_OUTPUT_FILES = $(addprefix $(OUTPUT_DIR)/,$(DEP_FILES))
 
# static library
STATIC_LIBS = 

# shared libraty
SHARED_LIBS =

# compile options
MARRCO_OPTIONS = $(addprefix -D, $(MARRCOS))
INCLUDE_DIR_OPTIONS = $(addprefix -I, $(INCLUD_DIR))
COMPILE_OPTIONS = $(COMPILE_STD_OPTIONS) \
					$(COMPILE_WARN_OPTIONS) \
					$(COMPILE_DEBUG_OPTIONS) \
					$(MARRCO_OPTIONS) \
					$(INCLUDE_DIR_OPTIONS) \
					-ffunction-sections \
					-fdata-sections
 
# link options
STATIC_LIB_DIR_OPTIOS = $(addprefix -L, $(STATIC_LIB_DIR))
STATIC_LIBS_OPTIONS = $(addprefix -l, $(STATIC_LIBS))
SHARED_LIBS_OPTIONS = $(addprefix -l, $(SHARED_LIBS))
LINK_OPTIONS = $(STATIC_LIBS_OPTIONS) $(STATIC_LIB_DIR_OPTIOS) $(SHARED_LIBS_OPTIONS)
	
TARGET = $(OUTPUT_DIR)/main.exe
 
# specify targets
.PHONY:mkdir clean vars
 
# default target
default:mkdir $(TARGET)
 
$(TARGET): $(OBJ_OUTPUT_FILES)
	@echo "link"
	$(COMPILER) $^ -o $@ $(LINK_OPTIONS)
	@echo "all finished"
 
$(OUTPUT_DIR)/%.o : $(SRC_DIR)/%.cpp $(OUTPUT_DIR)/%.d
	@echo "compile $@"
	@$(COMPILER) $(COMPILE_OPTIONS) -c $< -o $@
	
$(OUTPUT_DIR)/%.d : $(SRC_DIR)/%.cpp
	@(set -e; \
	rm -f $@; \
	$(COMPILER) $(COMPILE_OPTIONS) -MM $< > $@.$$$$; \
 	sed 's,.*\.o:,$*.o $@: ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$)

-include $(DEP_OUTPUT_FILES)

mkdir:
ifneq ($(OUTPUT_DIR), $(wildcard $(OUTPUT_DIR)))
	@echo "mkdir"
	@mkdir $(OUTPUT_DIR)
endif
 
clean:
	rm -rf $(OUTPUT_DIR)

vars:
	@echo "SRC_FILES:$(SRC_FILES)"
	@echo "SRCS:$(SRCS)"
	@echo "OBJ_FILES:$(OBJ_FILES)"
	@echo "DEP_FILES:$(DEP_FILES)"
	@echo "SRC_OBJ_FILES:$(SRC_OBJ_FILES)"
	@echo "OBJ_OUTPUT_FILES:$(OBJ_OUTPUT_FILES)"
	@echo "DEP_OUTPUT_FILES:$(DEP_OUTPUT_FILES)"
相关推荐
AI科技星8 分钟前
全域数学·第三部·数术几何部·平行网格卷 完整专著目录(含拓扑发展史+学科定位·终稿)
c语言·开发语言·网络·量子计算·agi
霞姐聊IT32 分钟前
SR-IOV、MR-IOV 与 SIOV:PCIe虚拟化技术的过去、现在与未来
linux·服务器·虚拟化·pcie
汉克老师36 分钟前
GESP6级C++考试语法知识(十七、数据结构(三、认识队列 Queue))
数据结构·c++·队列·gesp6级·gesp六级·数组模拟队列
szxinmai主板定制专家1 小时前
电力设备RK3568/RK3576+FPGA,多系统混合部署Linux+RTOS RT-THREAD,强实时性
linux·运维·服务器·人工智能·嵌入式硬件·fpga开发
枕星而眠1 小时前
Linux 四大进程/线程同步锁详解:互斥锁、读写锁、条件变量、文件锁
linux·c语言·后端·ubuntu·学习方法
L、2182 小时前
CANN调优工具链全景:从profiler到tensorboard的完整观测体系
linux·运维·服务器·深度学习
社交怪人2 小时前
【数字对调】信息学奥赛一本通C语言解法(题号2070)
c语言·开发语言
hef2882 小时前
C语言中char指针与数组的区别及应用
c语言·开发语言
j_xxx404_2 小时前
Linux进程信号捕捉与操作系统运行本质深度解析
linux·运维·服务器·开发语言·c++·人工智能·ai
eggrall3 小时前
Linux信号——保存信号
linux·运维·服务器