下载源码
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