# 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)"
Makefile template
lxzlife2023-10-20 20:48
相关推荐
啦啦啦啦啦zzzz7 分钟前
moduo网络库 Acceptor TcpConnection键盘会跳舞10 分钟前
C++:右值引用与移动语义源码级深度拆解——现代C++性能优化的语言基石天疆说16 分钟前
04 稳定性与性能调优实录:OOM 崩溃、并发槽位、前缀缓存与 DSpark 调参星卯教育tony17 分钟前
NOI Linux 2.0 服务器多用户网页桌面部署方案(腾讯云轻量Ubuntu20.04专属版 CSP复赛比赛环境搭建免安装虚拟机 )码匠许师傅19 分钟前
【C++ 面试真题】聊聊 C++ 的虚函数和多态Forever Nore1 小时前
LeetCode 14 最长公共前缀 - 纵向扫描拂拉氏1 小时前
【知识讲解】 Linux权限相关知识讲解djjjx.1 小时前
【 C++ 】多态Shadow(⊙o⊙)1 小时前
Linux网络部分——TCP协议服务端客户端交互接口,入门级硬核解析1.0鸿芯微控科技2 小时前
MFC关断后还有流量怎么办?零流量、阀门泄漏、压差与Python分析