数据库连接池DBPool分析(五):Makefile
来源:互联网 发布:个性签名 知乎 编辑:程序博客网 时间:2024/06/07 03:40
Makefile的设计思想是编译MysqlObj和RedisObj,并将它们链接成静态库和动态库,供外部调用。这里是供gtest来调用。这里参考了leveldb的Makefile的设计思想。
这里有个需要小心的地方,因为用到了gtest,所以编译的时候需要链接-lgtest,-lgtest必须要放在-lpthread前面,否则编译会错误
安静模式
还有一个Makefile的magic,我把它称为安静模式,这是我公司的同事做的,我把它借鉴过来了,这个安静模式的作用就是让make打印出来的编译信息简化,
比如:
g++ -std=c++0x -O2 -g -fPIC -c -o util/mysql_connection_pool.o util/mysql_connection_pool.cppg++ -std=c++0x -O2 -g -fPIC -c -o util/mysql_obj.o util/mysql_obj.cppg++ -std=c++0x -O2 -g -fPIC -c -o util/redis_obj.o util/redis_obj.cpp
现在变成了:
CXX util/mysql_connection_pool.oCXX util/mysql_obj.oCXX util/redis_obj.o
这样就好看多了。
安静模式的核心代码是:
# 安静模式的核心代码ifeq ("$(origin V)", "command line") BUILD_VERBOSE = $(V)endififndef BUILD_VERBOSE BUILD_VERBOSE = 0endififeq ($(BUILD_VERBOSE),0) QUIET_CC = @echo ' ' CC $@; QUIET_CXX = @echo ' ' CXX $@;endif
然后在需要使用$(CXX)的地方用$(QUIET_CXX)$(CXX)替代。
# # Use 'make V=1' to see the full commands#使用安静模式可以不看gcc,g++的参数CC := gcc CXX := g++AR := arLIBRARY := libdbpool.aSHARED := libdbpool.soINCLUDE := -I/usr/local/include# -lgtest 一定要放在 -lpthread 前面LIBS := -L/usr/local/lib -L/usr/lib64/mysql -lgtest -lpthread -lmysqlclient -lhiredisCFLAGS := CPPFLAGS := -std=c++0x -O2 -g -fPICSHARED_LDFLAGS := -shared -fPIC -Wl,-soname,${SHARED}LIBCFILES := $(wildcard ./util/*.c)LIBCPPFILES := $(wildcard ./util/*.cc ./util/*.cpp)LIBOBJECTS := $(addsuffix .o, $(basename $(LIBCFILES)) $(basename $(LIBCPPFILES)))CFILES := $(wildcard ./gtest/*.c)CPPFILES := $(wildcard ./gtest/*.cc ./gtest/*.cpp)OBJECTS := $(addsuffix .o, $(basename $(CFILES)) $(basename $(CPPFILES)))TARGETS := $(basename $(OBJECTS))# 安静模式的核心代码ifeq ("$(origin V)", "command line") BUILD_VERBOSE = $(V)endififndef BUILD_VERBOSE BUILD_VERBOSE = 0endififeq ($(BUILD_VERBOSE),0) QUIET_CC = @echo ' ' CC $@; QUIET_CXX = @echo ' ' CXX $@;endifall: $(LIBRARY) $(SHARED) @echo "--------------------------make successful-----------------------"check: all $(TARGETS)$(LIBRARY): $(LIBOBJECTS) -rm -rf $@ $(AR) crv $@ $(LIBOBJECTS)$(SHARED): $(QUIET_CXX)$(CXX) $(SHARED_LDFLAGS) -o $@ $(LIBOBJECTS) $(LIBS)$(TARGETS): $(OBJECTS) $(QUIET_CXX)$(CXX) -o $@ $(addsuffix .o, $@) $(LIBS) -L. -ldbpool#下面的Makefile其实只是为了使用安静模式而已,如果将下面的代码去掉的话也能编译成功,因为默认的make规则将被执行./util/%.o:./util/%.c $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<./util/%.o:./util/%.cc $(QUIET_CXX)$(CXX) $(CPPFLAGS) -c -o $@ $<./util/%.o:./util/%.cpp $(QUIET_CXX)$(CXX) $(CPPFLAGS) -c -o $@ $<./gtest/%.o:./gtest/%.c $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<./gtest/%.o:./gtest/%.cc $(QUIET_CXX)$(CXX) $(CPPFLAGS) -c -o $@ $<./gtest/%.o:./gtest/%.cpp $(QUIET_CXX)$(CXX) $(CPPFLAGS) -c -o $@ $<.PHONY:cleanclean: -rm -f ./util/*.o ./gtest/*.o $(LIBRARY) $(SHARED) $(TARGETS) @echo "--------------------------make clean-----------------------"
0 0
- 数据库连接池DBPool分析(五):Makefile
- 数据库连接池DBPool分析(一):简介
- 数据库连接池DBPool分析(六):gtest
- 数据库连接池DBPool分析(四):mysql连接池 mysql_connection_pool
- 数据库连接池DBPool分析(八):redis连接池 redis_connection_pool
- 数据库连接池DBPool分析(三):Mysql连接控制:MysqlObj
- 数据库连接池DBPool分析(七):Redis连接控制 RedisObj
- 数据库连接池DBPool分析(二):存放Mysql的查询结果 QueryResult.h
- 数据库连接池DBPool分析(九):Theron库+gtest来测试
- 基于DBPool的数据库连接池
- DBPool---Jdbc 各种数据库连接的配置
- makefile(五)
- makefile详解(五)
- 学习makefile(五)
- MakeFile基础知识(五)
- Makefile详解(五)
- DBpool连接池的使用与总结
- java 数据库连接方式(五)
- 堆,优先队列
- android studio gradle 签名
- 计算一个数的二进制位中1的个数的方法总结
- Android中关于颜色的使用
- java学习笔记--类与接口
- 数据库连接池DBPool分析(五):Makefile
- WAMP Server多站点出现You don t have permission to access / on this server错误
- #SC2440虚拟地址到物理地址的转换
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- 【html】day05_表格_表单
- (第三期1.1.4节)myvivi(1th)
- 数据库连接池DBPool分析(六):gtest
- 小马哥---高仿苹果6刷机 主板型号v68 拆机主板图与开机界面图 6572芯片
- LeetCode(22)Generate Parentheses