gpt4 book ai didi

c++ - 在 Windows 上使用 hiredis 进行开发

转载 作者:IT王子 更新时间:2023-10-29 06:00:39 27 4
gpt4 key购买 nike

尝试使用 hiredis在 Windows 上,构建一个普通的 c++ 应用程序来读取和写入 redis。问题是 hiredis 并不正式支持在 Windows 上构建。如何使用 hiredis 和 C++ 构建应用程序?

最佳答案

经过大量搜索和尝试后,我建议使用 CMake 这种方法,尽管这些信息也可用于使用其他构建系统进行构建。

捕获Microsoft's open source redis project并打开项目文件 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})

就是这样。大功告成。

关于c++ - 在 Windows 上使用 hiredis 进行开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32190625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com