在Windows上使用hiredis开发

试图在Windows上使用hiredis ,构build一个正常的c ++应用程序来读写redis。 问题是,hiredis不正式支持在Windows上构build。 如何build立一个应用程序利用hiredis与C + +?

经过大量的搜索和尝试,我提出了使用CMake的这种方法,虽然信息也可以用来与其他构建系统一起构建。

抓住微软的开源redis项目并打开项目文件msvs\Redisserver.sln

以期望的配置构建项目(调试,发布…)

创建一个名为hiredis_ROOT (控制面板 – >系统 – >高级系统设置 – >环境变量)的环境变量,并将其值设置为提取的redis文件夹

用下面的内容创建一个cmake查找模块,并将其放在cmake文件夹下的项目根目录下,名称为Findhiredis.cmake

 # set search hint directories set( hiredis_POSSIBLE_ROOT_PATHS $ENV{hiredis_ROOT} /usr/local /usr ) # find hiredis include directory # ================================================================================= find_path( hiredis_INCLUDE_DIR NAME hiredis/hiredis.h HINTS ${hiredis_POSSIBLE_ROOT_PATHS} PATH_SUFFIXES "include" "deps" ) if(NOT hiredis_INCLUDE_DIR) message(STATUS "Checking for hiredis... no") message(STATUS "Could not find include path for hiredis, try setting hiredis_ROOT") return() endif() # find hiredis library # ================================================================================= # library for debug builds find_library( hiredis_LIBRARY_DEBUG NAMES hiredis HINTS ${hiredis_POSSIBLE_ROOT_PATHS} PATH_SUFFIXES "msvs/x64/Debug" DOC "hiredis library for debug builds" ) # library for release builds find_library( hiredis_LIBRARY_RELEASE NAMES hiredis HINTS ${hiredis_POSSIBLE_ROOT_PATHS} PATH_SUFFIXES "msvs/x64/Release" DOC "hiredis library for release builds" ) # create library name for linking set(hiredis_LIBRARY "") if(hiredis_LIBRARY_DEBUG AND hiredis_LIBRARY_RELEASE) set(hiredis_LIBRARY "optimized;${hiredis_LIBRARY_RELEASE};debug;${hiredis_LIBRARY_DEBUG}") elseif(hiredis_LIBRARY_DEBUG) set(hiredis_LIBRARY "${hiredis_LIBRARY_DEBUG}") elseif(hiredis_LIBRARY_RELEASE) set(hiredis_LIBRARY "${hiredis_LIBRARY_RELEASE}") endif() # check the result if(NOT hiredis_LIBRARY) message(STATUS "Checking for hiredis... no") message(STATUS "hiredis include directory: ${hiredis_INCLUDE_DIR}") message(STATUS "Could not find hiredis library") return() endif() # find hiredis' interop library # ================================================================================= find_library( hiredis_interop_LIBRARY_DEBUG NAMES Win32_Interop HINTS ${hiredis_POSSIBLE_ROOT_PATHS} PATH_SUFFIXES "msvs/x64/Debug" DOC "Windows modified interop library for debug builds" ) find_library( hiredis_interop_LIBRARY_RELEASE NAMES Win32_Interop HINTS ${hiredis_POSSIBLE_ROOT_PATHS} PATH_SUFFIXES "msvs/x64/Release" DOC "Windows modified interop library for release builds" ) set(hiredis_interop_LIBRARY "") if(hiredis_interop_LIBRARY_DEBUG AND hiredis_interop_LIBRARY_RELEASE) set(hiredis_interop_LIBRARY "optimized;${hiredis_interop_LIBRARY_RELEASE};debug;${hiredis_interop_LIBRARY_DEBUG}") elseif(hiredis_interop_LIBRARY_DEBUG) set(hiredis_interop_LIBRARY "${hiredis_interop_LIBRARY_DEBUG}") elseif(hiredis_interop_LIBRARY_RELEASE) set(hiredis_interop_LIBRARY "${hiredis_interop_LIBRARY_RELEASE}") endif() # check the result if(NOT hiredis_interop_LIBRARY) message(STATUS "Checking for hiredis' interop... no") message(STATUS "hiredis include directory: ${hiredis_INCLUDE_DIR}") message(STATUS "Could not find hiredis interop library") return() endif() # Sum up libraries # ================================================================================= set(Ws2_32_LIBRARY "optimized;Ws2_32;debug;Ws2_32") set( hiredis_LIBRARIES ${hiredis_LIBRARY} ${hiredis_interop_LIBRARY} ${Ws2_32_LIBRARY} ) # everything is found. just finish up # ================================================================================= set(hiredis_FOUND TRUE CACHE BOOL "Whether hiredis is found on the system or not") set(hiredis_INCLUDE_DIR ${hiredis_INCLUDE_DIR} CACHE PATH "hiredis include directory") set(hiredis_LIBRARIES ${hiredis_LIBRARIES} CACHE FILEPATH "hiredis library for linking against") message(STATUS "Checking for hiredis... yes") 

使用以下命令将查找模块包含在顶级CMakeLists.txt

 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") find_package(hiredis REQUIRED) 

设置自定义定义,包括路径和链接库在您的cmake项目中:

 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_CRT_SECURE_NO_WARNINGS") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") include_directories(${hiredis_INCLUDE_DIR}) target_link_libraries(my-redis-application ${hiredis_LIBRARIES}) 

而已。 你完成了。