1年前写的,现在一些小型项目上,还是很好用的,兼容性还ok 分享一下 现在用不到了感觉

.PHONY:all cleanSHELL:=/bin/bash
MKDIR = mkdir -p
RM = rm
RMFLAGS = -rfARFLAGS = crs
DLFLAGS = -fPIC -sharedDIR_OBJS = $(ROOT)/objs
DIR_ELF = $(ROOT)/target
DIR_LIBS = $(ROOT)/libs
DIR_DLIBS = $(ROOT)/dlibsDIRS = $(DIR_ELF) $(DIR_LIBS) $(DIR_DLIBS)ifeq ($(CXX),g++)
CXX=g++
AR=ar
STRIP=strip
endififeq ($(VERSION),"")
VERSION="plaform-name-version"
endififdef TARGET
TARGET :=$(addprefix $(DIR_ELF)/,$(TARGET))
endififdef LIB
LIB := $(addprefix $(DIR_LIBS)/,$(LIB))
endififdef DLIB
DLIB := $(addprefix $(DIR_DLIBS)/,$(DLIB))
endif#单独指定可以编译的源文件
ifndef SRC
SRCS=$(wildcard *.cc)
OBJS=$(SRCS:.cc=.o)
OBJS :=$(addprefix $(DIR_OBJS)/,$(OBJS))
else
SRCS:=$(SRC)
OBJS=$(SRCS:.cc=.o)
OBJS :=$(addprefix $(DIR_OBJS)/,$(OBJS))
endififndef STATIC_OBJS
STATIC_OBJS = $(OBJS)
else
STATIC_OBJS := $(STATIC_OBJS:.cc=.o)
STATIC_OBJS := $(addprefix $(DIR_OBJS)/,$(STATIC_OBJS))
endififneq ($(INC_DIRS),"")
INC_DIRS := $(strip $(INC_DIRS))
INC_DIRS :=$(addprefix -I,$(INC_DIRS))
endififneq ($(LINK_LIBS),"")
LINK_LIBS := $(strip $(LINK_LIBS))
LINK_LIBS := $(addprefix -l,$(LINK_LIBS))
endififneq ($(LINK_DLIBS),"")
LINK_DLIBS := $(strip $(LINK_DLIBS))
LINK_DLIBS := $(addprefix -l,$(LINK_DLIBS))
endifdefine MAKE_EXTERN
@set -e ;\for tmp in $(1) ;\do \make -C $$tmp ;\done
endefdefine MAKE_EXTERN_CLEAN
@set -e ;\for tmp in $(1) ;\do \make clean -C $$tmp ;\done
endef#################### MAIN #####################
all:make $(DIRS)make $(DIR_OBJS)
ifdef LIBmake $(LIB)
endif
ifdef DLIBmake $(DLIB)
endif
ifdef MAKE_PRE$(call MAKE_EXTERN,$(MAKE_PRE))
endif
ifdef TARGETmake $(TARGET)
endif
ifdef MAKE_OTHER$(call MAKE_EXTERN,$(MAKE_OTHER))
endif
#################### MAIN #####################$(DIRS):$(MKDIR) $@$(DIR_OBJS):$(MKDIR) $(addprefix $(DIR_OBJS)/,$(dir $(SRC))) $(dir $(STATIC_OBJS))define COLOR_PATH
echo -e "\e[31;1m$(1) $(2) $(3)\033[0m"
endefdefine ECHO_APP_PATH@set -e ;\[[ -f $(1) ]] && $(call COLOR_PATH,[ NEW APP PATH ],>>>>>>,$(abspath $(1))) ;\[[ -f $(1) ]] && echo "$$(date) $$(md5sum $(abspath $(1)))" >> version.log
endef$(TARGET):$(OBJS)$(CXX) -L$(DIR_LIBS) -L$(DIR_DLIBS) $(filter %.o,$^) $(LINK_LIBS) $(LINK_DLIBS) -o $@ $(CFLAGS) $(INC_DIRS)$(STRIP) $(TARGET)$(call ECHO_APP_PATH,$@)$(LIB): $(STATIC_OBJS)$(AR) $(ARFLAGS) $@ $(filter %.o,$^)$(DLIB): $(SRCS)$(CXX) $(DLFLAGS) $(filter %.cc,$^)  -o $@ $(CFLAGS) $(INC_DIRS)$(DIR_OBJS)/%.o : %.cc$(CXX) $(INC_DIRS) -E -MM $(filter %.cc,$^) > $@.dep$(CXX) $(INC_DIRS) -o $@ -c $(filter %.cc,$^) $(CFLAGS) $(INC_DIRS)tags:@ctags -R ;\cscope -Rbq
dist:@tar cvzf $$(date +%y%m%d%H%M).tar.gz $(TARGET)version:echo "#ifndef __$(VERSION)_VERSION" > config.hppecho "" >> config.hppecho "#endif /*__$(VERSION)_VERSION*/" >> config.hppsed  -i 2c"static const char platform_version[] =\"$(VERSION)\";" config.hppclean:
ifdef MAKE_OTHER$(call MAKE_EXTERN_CLEAN,$(MAKE_OTHER))
endif
ifdef MAKE_PRE$(call MAKE_EXTERN_CLEAN,$(MAKE_PRE))
endif$(RM) $(RMFLAGS) $(notdir $(DIRS)) objs $(OBJS) tags cscope* config.hpp

此文件命名为 config.mk
大写的变量为环境变量,自己看着办

 CXX=g++
ROOT=.TARGET=cplus_debugSRC=$(wildcard *.cc)
include config.mk

上面的为工程管理的Makefile 文本,最简示例

自建通用Makefile 分享相关推荐

  1. 妙用postman系列——postman建组、分享

    妙用postman系列--postman建组.分享 添加新的组和请求. 3.生成分享链接 4.导入分享链接

  2. django 1.8 官方文档翻译: 3-4-2 基于类的内建通用视图

    基于类的内建通用视图 编写Web应用可能是单调的,因为你需要不断的重复某一种模式. Django尝试从model和 template层移除一些单调的情况,但是Web开发者依然会在view(视图)层经历 ...

  3. 通用makefile

    文章目录 1 最基本的makefile 1.1 简单粗暴的makefile 1.2 稍微提高效率的makefile 1.3 更加精炼的makefile 1.4 需要手工添加头文件规则的makefile ...

  4. C/C++通用Makefile

    最近的项目又回到了Linux上运行,这就需要在Linux下编译项目,写Makefile针对习惯了Windows的程序员来说是一件痛苦的事,如果有一个通用的Makefile该多好啊,本着这样的目的,我再 ...

  5. linux下通用Makefile写法

    linux编译多个源文件的程序比较麻烦,这下就需要通用的Makefile了,编译的时候执行一下make命令就OK,下面介绍通用makfile的写法. 假设现在有以下源文件:file1.h file1. ...

  6. 通用Makefile实现

    Makefile是Linux下程序开发的自动化编译工具,一个好的Makefile应该准确的识别编译目标与源文件的依赖关系,并且有着高效的编译效率,即每次重新make时只需要处理那些修改过的文件即可.M ...

  7. 通用Makefile模板

    #################################################################################################### ...

  8. ipad投屏到海信电视通用方法分享

    ipad投屏到海信电视通用方法分享 大致流程:1.安装蚂蚁市场应用商店.2.安装投屏软件.3.根据提示开始投屏 1.先去蚂蚁市场,下载[海信专版]安装包到U盘 2.将U盘接入海信电视后,依次选择电视的 ...

  9. 红白机 编译6502汇编生成NES文件的通用Makefile

    6502汇编生成NES的通用Makefile #依赖sudo apt install cc65 #DIR_INC = ./include DIR_SRC = . DIR_OBJ = . DIR_BIN ...

最新文章

  1. css在兼容模式下无法引用_如何在CSS中使用深色模式
  2. 爬取30亿人脸被600家执法机构使用,这家公司揭美国数据隐私老底
  3. 一招教你掌握肌肉发力的感觉
  4. Android WebView与js交互通信
  5. Hello world开始
  6. RabbiMQ基础以及spring-boot-starter-amqp使用
  7. Python之线程同步与线程锁
  8. PIFA-平面倒F天线[搬运]
  9. html中字体都可以设置哪些,html中设置字体的属性有哪些
  10. hive获取数据中位数函数
  11. bandwagon支付宝支付教程
  12. 内部寄存器:通用寄存器、控制寄存器、段寄存器
  13. 操作系统学习之文件管理:
  14. 人机交互及界面设计序言
  15. 传输网,交换网,接入网的区别
  16. openlayers4 入门开发系列之风场图篇
  17. 对Java开发的现状和未来发展的思考,专题解析
  18. Android运行时权限一览表
  19. 213. 字符串压缩--LintCode领扣编程题
  20. opencv 绿幕背景视频抠图

热门文章

  1. [转].Net连接池超时注意事项
  2. 识别、触达、转化、评估!百度云用ABC四招颠覆营销不可能
  3. Nginx配置文档具体解释
  4. 2015下半年软考系统集成管理工程师10月8日作业
  5. 转帖-MySQL Innodb日志机制深入分析
  6. Linux sendmail 服务器
  7. 解决新配置虚拟主机不生效的问题
  8. 推出应用加速器 伟库网为用户应用体验上保险
  9. ASP.NET 数据分页第三篇 - 结合 Custom Control 处理 GridView 的 UI 呈现
  10. db2dual_DB2常用SQL的写法(持续更新中...)