makefile解析:一些常用函数
#=======================================================================
#指定目标文件名,makefile中的变量直接使用不用申明
EXENAME = game_snake
#加-g 生成debug调试信息 注释掉DEFINES则编译RELEASE模式
DEFINES = -g
#编译器
CC = g++
LINK = buildserver
#动态库
LIB_SO += curl
#静态库
#STATIC_LIB = /usr/local/lib/liblua.a
#源文件目录
ROOT = $(shell pwd) #ROOT = $(shell pwd) 获得Makefile的当前路径
SRC_DIR = $(ROOT)/src/
SRC_DIR += $(ROOT)/comm/
#头文件目录
INCS = $(shell find $(SRC_DIR) -name '*.h') #寻找pwd目录下的所有名字后缀为.h的头文件
INC_DIR = $(dir $(INCS))
#头文件目录排序
INCLUDE = -I.
INCLUDE += $(sort $(foreach i, $(INC_DIR), -I$(i))) #对INC_DIR所代表的头文件进行排序
#INCLUDE += /usr/local/include/
#源文件
#SRCS = $(wildcard *.cpp) #制定目录下的cpp文件全部展开
_SRCS = $(shell find $(SRC_DIR) -name '*.cpp') #寻找SRC_DIR所代表目录下的所有名字后缀为.cpp的头文件
#需要排除的目录
#_EXCLDIR = XXX
#需要排除的源文件
_EXCLUS = $(shell find $(_EXCLDIR) -name '*.cpp')
#排除后的源文件
SRCS = $(filter-out $(_EXCLUS), $(_SRCS)) #排除指定目录下的文件
#中间文件
OBJS = $(patsubst %.cpp, %.o, $(SRCS)) #生存.cpp相对应的.o文件, 模式匹配替换SRCS所代表的字符串中后缀为.cpp的替换为.o
#$(subst FROM, TO, TEXT),即将字符串TEXT中的子串FROM变为TO。 subst 是全字符串替换,patsubst 是模式替换
#目标文件目录
ifndef DEFINES
EXE_DIR = $(ROOT)/bin
else
EXE_DIR = $(ROOT)/bin
endif
#目标文件
EXES = $(EXE_DIR)/$(EXENAME)
#编译优化选项 -O1:一级优化 为release版本
ifeq ($(origin DEFINES), undefined) #origin函数判断DEFINES的出生情况,如果DEFINES未定义过那么$(origin DEFINES)返回undefined 这个if判断为真
DEFINES = -O1
OPTIONS = -s
endif
#编译选项:_LOGSCR - 日志信息输出到屏幕;_LOGFILE - 日志输出到文件;
CFLAGS = -Wall $(DEFINES) -D_LOGFILE #选项 -Wall 开启编译器几乎所有常用的警告──强烈建议你始终使用该选项。编译器有很多其他的警告选项,但 -Wall 是最常用的。默认情况下GCC 不会产生任何警告信息。
ifeq ($(origin OPTIONS), undefined)
CFLAGS += -D_LOGSCR #输出日志到屏幕
else
CFLAGS += -D_RUNSERVICE #后台模式 日志不屏显
endif
#连接选项
LFLAGS = $(OPTIONS)
LFLAGS += -lm -m64 -ldl -rdynamic -L$(LIB_DIR) -L$(TUXDIR)/lib -L$(LIB_DIR)/ActiveMQ -lcurses ## -lm: 显示连接数学库,,-m32: 编译为32位代码,,-ldl: 表示生成的对象模块需要使用共享库,,-rdynamic: 用来通知链接器将所有符号添加到动态符号表中(目的是能够通过使用 dlopen 来实现向后跟踪)
#LFLAGS += -L/usr/local/lib -DLUA_USE_READLINE
LFLAGS += $(foreach i, $(LIB_SO), -l$(i)) #动态库连接
#LFLAGS += /usr/lib/cjson.so
#规则
#all:$(EXES) #目标文件
$(EXES):$(OBJS) #依赖关系
$(CC) -o $@ $(LFLAGS) $(OBJS) $(LFLAGS) $(STATIC_LIB) #连接选项LFLAGS,,依赖哪些动态库 + 依赖哪些目标文件 + 依赖哪些静态库
$(OBJS):%.o:%.cpp
$(CC) -o $@ -c $< $(CFLAGS) $(INCLUDE) #有的.o文件的生成依赖其他.o文件,,$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件
#$(SRCS:.cpp=.o):$(INCS)
clean:
-rm -f $(OBJS)
-rm -f $(EXE_DIR)/ULOG.*
-rm -f $(EXE_DIR)/access.*
-rm -f $(EXE_DIR)/good.*
-rm -f $(EXE_DIR)/*.log
-rm -f $(EXES)
cleanall: clean
rm -f $(EXES)
rebuild: cleanall
make
#=======================================================================
1.Makefile基本语法
target为要生成的目标文件;dependency为target的依赖文件;command为用于生成target的命令行;
<target> : <dependency> <dependency> ...
(tab)<command>
(tab)<command>
$(shell find $(SRC_DIR) -name '*.h') #寻找SRC_DIR所代表目录下的所有名字后缀为.h的头文件 $(sort $(foreach i, $(INC_DIR), -I$(i))) #对INC_DIR所代表的头文件进行排序 $(shell find $(SRC_DIR) -name '*.cpp') #寻找SRC_DIR所代表目录下的所有名字后缀为.cpp的头文件 $(patsubst %.cpp, %.o, $(SRCS)): 模式匹配替换SRCS所代表的字符串中后缀为.cpp的替换为.o $(subst FROM, TO, TEXT),即将字符串TEXT中的子串FROM变为TO。 ------subst 是全字符串替换,patsubst 是模式替换 ifeq ($(origin DEFINES), undefined) --判断是否相等。。 origin函数判断DEFINES的出生情况,如果DEFINES未定义过那么$(origin DEFINES)返回undefined 这个if判断为真
g++ 后面跟的参数: -lm -m32 -ldl -rdynamic -lm: 显示连接数学库 -m32: 编译为32位代码 -ldl: 表示生成的对象模块需要使用共享库 -rdynamic: 用来通知链接器将所有符号添加到动态符号表中
(目的是能够通过使用 dlopen 来实现向后跟踪) 选项 -Wall 开启编译器几乎所有常用的警告──强烈建议你始终使用该选项。编译器有很多其他的警告选项,但 -Wall 是最常用的。默认情况下GCC 不会产生任何警告信息。
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件
http://blog.csdn.net/kesaihao862/article/details/7332528
makefile解析:一些常用函数的更多相关文章
- Python3.x的BeautifulSoup解析html常用函数
Python3.x的BeautifulSoup解析html常用函数 1,初始化: soup = BeautifulSoup(html) # html为html源代码字符串,type(html) == ...
- 【Makefile】Makefile中的常用函数简介
1. subst函数 格式:$(subst <from>, <to>, <text>)功能:把字串<text>中的<from>字符串替换成& ...
- makefile 常用函数
Linux下编译c/c++源码需要编写makefile文件,文章参看 http://blog.sina.com.cn/s/blog_4c4d6e74010009jr.html 一函数的调用语法 二字符 ...
- numpy.random模块常用函数解析
numpy.random模块中常用函数解析 numpy.random模块官方文档 1. numpy.random.rand(d0, d1, ..., dn)Create an array of the ...
- python重要的第三方库pandas模块常用函数解析之DataFrame
pandas模块常用函数解析之DataFrame 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器 ...
- pandas模块常用函数解析之Series(详解)
pandas模块常用函数解析之Series 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器输入网 ...
- Makefile常用函数总结
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具 有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 数的返回值可以当做变量来使用. 一 ...
- PHP常用函数备用
刚学习php的时候,我也为记忆php函数苦恼不已.认为干嘛记忆这么枯燥无味的东西呢?用的时候查一下手册不就行了吗?但是当时因为身在辅导机构,还是记忆了一大堆自己并不感兴趣的函数. 由此就想起来,小的时 ...
- 10月21日下午PHP常用函数
函数四要素:返回类型 函数名 参数列表 函数体 //最简单的函数定义方式 function Show() { echo "hello"; } Show();//输出结果为he ...
- PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)
PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr; //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...
随机推荐
- CSS边框效果
前面的话 本文将详细介绍CSS边框效果 半透明边框 border:10px solid hsla(0, 0%, 100%,.5); background-clip:padding-box; 缝边效果 ...
- Nginx 对上游使用SSL链接
L96 双向认证SSL指令示列 对下游使用证书指令 Syntax: ssl_certificate file; Default: — Context: http, server Syntax: ssl ...
- Android组件化、模块化、插件化
组件:指的是单一的功能组件,如地图组件(MapSDK).扫码组件(QRCode).支付组件(AnjukePay).路由组件(Router)等等: 模块:指的是独立的业务模块,如新房模块(NewHous ...
- SpringBoot整合ssm
1.创建工程 使用idea可以快速创建SpringBoot的工程 这里选择常用的类库,SpringBoot将各种框架类库都进行了封装,可以减少pom文件中的引用配置: 比如Spring和Mybatis ...
- [NOIp2009] $Hankson$ 的趣味题
类型:数论 传送门:>Here< 题意:给出四个数$a_0,a_1,b_0,b_1$,求满足$gcd(x,a_0)=a_1,lcm(x,b_0)=b_1$的$x$的个数 解题思路 显然$a ...
- 【BZOJ2431】【HAOI2009】逆序对数列 DP
题目大意 问你有多少个由\(n\)个数组成的,逆序对个数为\(k\)的排列. \(n,k\leq 1000\) 题解 我们考虑从小到大插入这\(n\)个数. 设当前插入了\(i\)个数,插入下一个数可 ...
- cordova window error
npm install -g cordova --save ; ------------------------- error: deprecated node-uuid@1.4.7: use uui ...
- python学习日记(文件操作)
文件操作概述 计算机系统分为:操作系统,计算机硬件,应用程序. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序 ...
- 多项式细节梳理&模板(多项式)
基础 很久以前的多项式总结 现在的码风又变了... FFT和NTT的板子 typedef complex<double> C; const double PI=acos(-1); void ...
- 「SCOI2015」小凸玩矩阵 解题报告
「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完 ...