redis源码阅读 2 - 解读makefile, make编译生成 redis-cli redis-server

下载源码

git clone git@github.com:redis/redis.git

生成带debug信息的redis-server和redis-cli

cd redis
 make CFLAGS="-g -O0"

指定编译参数支持debug

增加CFLAGS="-g -O0"参数,支持编辑器debug

make CFLAGS="-g -O0"

官方关于debug说明连接

https://redis.io/topics/debugging

此时,可见src目录下已生成 *.o文件 和 redis-server, redis-cli等可执行程序

配置好Clion后,debug便能看到相关变量信息。

makefile说明

makefile 可理解为make命令的配置文件,可使分块式执行shell命令。
在make之后有更先进的cmake工具。

make命令依赖 Makefile
cmake命令依赖 CMakeLists.txt

makefile语法

target ...: prerequisites
            command
            command

在这里插入图片描述

  • 通常target是目标文件,由command生成。但你可以定义一个永远不会被生成的target,使得command每次都会被执行
  • prerequisites也可以是代码文件,也可以是另一个target
    ,对比修改时间决定本组command是否执行

makefile .DEFAULT .PHONY include说明

.DEFAULT是依赖项目不存在时,执行的默认动作
.PHONY是不管文件是否存在,都要执行其command
如:

# make 不指定动作时,默认执行第一个动作,名字随意叫,此处叫default
# default 依赖 all,  因为all模块不存在, 所以执行默认动作.DEFAULT
default: all

# 定义依赖项不存在时的 默认动作
.DEFAULT:
	cd src && $(MAKE) $@

install:
	cd src && $(MAKE) $@

# 定义install动作模块是一个伪模块,即不检查是否存在install文件都要执行其命令。
.PHONY: install

# inclue 可以加载其他makefile文件进来,作为本makefile的一部分
include release.mk

redis 项目下的makefile

redis项目的中有很多makefile, 分别有

➜  redis git:(unstable) ✗ find ./ |grep 'akefile' 
.//Makefile
.//tests/modules/Makefile
.//deps/Makefile
.//deps/jemalloc/Makefile.in
.//deps/linenoise/Makefile
.//deps/hiredis/Makefile
.//deps/lua/Makefile
.//deps/lua/etc/Makefile
.//deps/lua/src/Makefile
.//deps/hdr_histogram/Makefile
.//src/Makefile.dep
.//src/Makefile
.//src/latex/Makefile
.//src/modules/Makefile

查看./Makefile 可以看到,在redis根目录每次执行make 和 make install效果差别大, 都是进入src目录 执行其Makefile中的all动作。

参考文档

对 makefile 中 .DEFAULT 的理解

https://www.cnblogs.com/thrillerz/articles/4510124.html

makefile中的target到底代表什么?

https://www.cnblogs.com/bwangel23/p/4497250.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值