clion 调试 redis 源码
03 March 2018

说明

说明:基于 redis 最新版本 4

➜ git clone https://github.com/antirez/redis redis-src
➜ git checkout 4.0.8  -b redis-4.0.8
➜ cd redis-src
➜ mv Makefile Makefile.back

➜ find . -iname CMakelists.txt
./CMakeLists.txt
./deps/CMakeLists.txt
./deps/linenoise/CMakeLists.txt
./deps/hiredis/CMakeLists.txt
./deps/lua/CMakeLists.txt
./deps/lua/src/CMakeLists.txt
./src/modules/CMakeLists.txt

redis-src

➜ vi CMakeLists.txt
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(redis VERSION 4.0)
set(CMAKE_BUILD_TYPE "Debug")

get_filename_component(REDIS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE)

add_subdirectory(deps)
add_subdirectory(src/modules)

set(SRC_SERVER_TMP
  src/adlist.c
  src/ae.c
  src/anet.c
  src/dict.c
  src/sds.c
  src/zmalloc.c
  src/lzf_c.c
  src/lzf_d.c
  src/pqsort.c
  src/zipmap.c
  src/sha1.c
  src/ziplist.c
  src/release.c
  src/networking.c
  src/util.c
  src/object.c
  src/db.c
  src/replication.c
  src/rdb.c
  src/t_string.c
  src/t_list.c
  src/t_set.c
  src/t_zset.c
  src/evict.c
  src/defrag.c
  src/module.c
  src/quicklist.c
  src/expire.c
  src/childinfo.c
  src/redis-check-aof.c
  src/redis-check-rdb.c
  src/lazyfree.c
  src/geohash.c
  src/rax.c
  src/geohash_helper.c
  src/siphash.c
  src/geo.c
  src/t_hash.c
  src/config.c
  src/aof.c
  src/pubsub.c
  src/multi.c
  src/debug.c
  src/sort.c
  src/intset.c
  src/syncio.c
  src/cluster.c
  src/crc16.c
  src/endianconv.c
  src/slowlog.c
  src/scripting.c
  src/bio.c
  src/rio.c
  src/rand.c
  src/memtest.c
  src/crc64.c
  src/bitops.c
  src/sentinel.c
  src/notify.c
  src/setproctitle.c
  src/blocked.c
  src/hyperloglog.c
  src/latency.c
  src/sparkline.c
  )
set(SRC_SERVER src/server.c ${SRC_SERVER_TMP})

set(SRC_CLI
  src/anet.c
  src/sds.c
  src/adlist.c
  src/redis-cli.c
  src/zmalloc.c
  src/release.c
  src/anet.c
  src/ae.c
  src/crc64.c
  )


set(EXECUTABLE_OUTPUT_PATH src)
link_directories(deps/linenoise/ deps/lua/src deps/hiredis)

add_executable(redis-server ${SRC_SERVER})
target_include_directories(redis-server
                         PRIVATE ${REDIS_ROOT}/deps/linenoise
                         PRIVATE ${REDIS_ROOT}/deps/hiredis
                         PRIVATE ${REDIS_ROOT}/deps/lua/src)
target_link_libraries(redis-server
                    PRIVATE pthread
                    PRIVATE m
                    PRIVATE lua
                    PRIVATE linenoise
                    PRIVATE hiredis)


add_executable(redis-cli ${SRC_CLI})
target_include_directories(redis-cli
                         PRIVATE ${REDIS_ROOT}/deps/linenoise
                         PRIVATE ${REDIS_ROOT}/deps/hiredis
                         PRIVATE ${REDIS_ROOT}/deps/lua/src)

target_link_libraries(redis-cli
                    PRIVATE pthread
                    PRIVATE m
                    PRIVATE linenoise
                    PRIVATE hiredis)

redis-src/deps

➜ vi deps/CMakeLists.txt
add_subdirectory(linenoise)
add_subdirectory(lua)
add_subdirectory(hiredis)

linenoise

➜ vi deps/linenoise/CMakeLists.txt
add_library(linenoise
     linenoise.c
)

hiredis

➜ vi deps/hiredis/CMakeLists.txt
add_library(hiredis STATIC
     hiredis.c
     net.c
     dict.c
     net.c
     sds.c
     async.c
     read.c
)

lua

➜ vi deps/lua/CMakeLists.txt
add_subdirectory(src)

➜ vi deps/lua/src/CMakeLists.txt
set(LUA_SRC
   lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c
   lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c
   lundump.c lvm.c lzio.c strbuf.c fpconv.c
   lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c ltablib.c
   lstrlib.c loadlib.c linit.c lua_cjson.c lua_struct.c lua_cmsgpack.c
   lua_bit.c
)

add_library(lua STATIC
   ${LUA_SRC}
)

redis-src/src/modules

➜ vi src/modules/CMakeLists.txt
cmake_minimum_required(VERSION 3.9)
set(CMAKE_BUILD_TYPE "Debug")
add_library(helloworld SHARED helloworld.c)
set_target_properties(helloworld PROPERTIES PREFIX "" SUFFIX ".so")


add_library(hellotype SHARED hellotype.c)
set_target_properties(hellotype PROPERTIES PREFIX "" SUFFIX ".so")


add_library(helloblock SHARED helloblock.c)
set_target_properties(helloblock PROPERTIES PREFIX "" SUFFIX ".so")


add_library(testmodule SHARED testmodule.c)
set_target_properties(testmodule PROPERTIES PREFIX "" SUFFIX ".so")

make

➜ cmake .
➜ make