首页 > 解决方案 > 如何从 vcpkg 导入 cmake 中的包?

问题描述

当我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)

所以我添加

    find_package(simdjson CONFIG REQUIRED)
    target_link_libraries(main PRIVATE simdjson::simdjson simdjson::simdjson-flags simdjson::simdjson-headers)

使用CMakeLists.txtsimdjson

但是当我vcpkg install redis-plus-plus[cxx17],它什么都不返回。我应该怎么做才能cmake使用这个包?

标签: c++cmakevcpkg

解决方案


不幸的是,redis-plus-plus 不提供 CMake 配置文件。有人应该向上游提出问题。老实说,支持find_package您的图书馆是非常不可接受的。因此,由于作者的疏忽,您将不得不自己为他们的库创建一个导入的目标。这是一步一步的示例 CMakeLists.txt。我们将从标准样板开始:

cmake_minimum_required(VERSION 3.19)
project(test-redis)

然后我们需要找到hiredis,它是 Redis++ 的依赖项之一:

find_package(hiredis REQUIRED)

这将创建一个名为hiredis::hiredis我们稍后将链接到的目标。现在我们将创建一个目标来保存 Redis++ 使用信息。

add_library(redis++::redis++ UNKNOWN IMPORTED)

现在我们需要真正找到头文件路径和 redis++ 库:

find_path(REDIS_PP_HEADER sw REQUIRED)
find_library(REDIS_PP_LIB redis++ REQUIRED)

现在我们可以告诉 CMake,我们刚刚创建的目标管理着我们刚刚找到的库:

set_target_properties(redis++::redis++ PROPERTIES IMPORTED_LOCATION "${REDIS_PP_LIB}")

最后我们可以设置包含路径和对 Hiredis 的依赖。

target_include_directories(redis++::redis++ INTERFACE "${REDIS_PP_HEADER}")
target_link_libraries(redis++::redis++ INTERFACE hiredis::hiredis)

我们现在已经准备好使用我们应该能够期望的库了。

add_executable(main main.cpp)
target_link_libraries(main PRIVATE redis++::redis++)

推荐阅读