如何在cmake中从vcpkg导入包?

Dac*_*hao 1 c++ cmake vcpkg

当我时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使用这个包?

Ale*_*ing 5

不幸的是,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)