当我时vcpkg install simdjson,它返回:
The package simdjson:x64-linux provides CMake targets:
find_package(simdjson CONFIG REQUIRED)
target_link_libraries(main PRIVATE simdjson::simdjson simdjson::simdjson-flags simdjson::simdjson-headers)
Run Code Online (Sandbox Code Playgroud)
所以我添加
find_package(simdjson CONFIG REQUIRED)
target_link_libraries(main PRIVATE simdjson::simdjson simdjson::simdjson-flags simdjson::simdjson-headers)
Run Code Online (Sandbox Code Playgroud)
使用CMakeLists.txt该包simdjson
但当我这样做时vcpkg install redis-plus-plus[cxx17],它什么也没返回。我应该怎么做才能cmake使用这个包?
不幸的是,redis-plus-plus 不提供 CMake 配置文件。有人应该向上游提出问题。老实说,不支持find_package您的图书馆是非常不可接受的。因此,由于作者的疏忽,您将必须自己为其库创建一个导入的目标。下面是一个示例 CMakeLists.txt,分步说明。我们将从标准样板开始:
cmake_minimum_required(VERSION 3.19)
project(test-redis)
Run Code Online (Sandbox Code Playgroud)
然后我们需要找到hiredis,它是 Redis++ 的依赖项之一:
find_package(hiredis REQUIRED)
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为hiredis::hiredis我们稍后将链接到的目标。现在我们将创建一个目标来保存 Redis++ 使用信息。
add_library(redis++::redis++ UNKNOWN IMPORTED)
Run Code Online (Sandbox Code Playgroud)
现在我们需要实际找到头文件路径和redis++库:
find_path(REDIS_PP_HEADER sw REQUIRED)
find_library(REDIS_PP_LIB redis++ REQUIRED)
Run Code Online (Sandbox Code Playgroud)
现在我们可以告诉 CMake 我们刚刚创建的目标管理我们刚刚找到的库:
set_target_properties(redis++::redis++ PROPERTIES IMPORTED_LOCATION "${REDIS_PP_LIB}")
Run Code Online (Sandbox Code Playgroud)
最后我们可以设置 Hiredis 的包含路径和依赖关系。
target_include_directories(redis++::redis++ INTERFACE "${REDIS_PP_HEADER}")
target_link_libraries(redis++::redis++ INTERFACE hiredis::hiredis)
Run Code Online (Sandbox Code Playgroud)
现在我们已经准备好像我们期望的那样使用该库了。
add_executable(main main.cpp)
target_link_libraries(main PRIVATE redis++::redis++)
Run Code Online (Sandbox Code Playgroud)