如何从vcpkg导入cmake中的包?

How to import package in cmake from vcpkg?

当我 vcpkg install simdjson 时,它 returns :

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.txt使用包simdjson

但是当我 vcpkg install redis-plus-plus[cxx17] 时,它 returns 什么都没有。我应该怎么做才能让 cmake 使用这个包?

不幸的是,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 的目标,我们稍后会 link。现在我们将创建一个目标来保存 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++)