c++ - 如何从 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.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)
然后我们需要找到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++)
推荐阅读
- typescript - 如何覆盖索引签名
- spring - Spring Security SAML2 多 IDP 配置
- node.js - NodeJS http服务器超时时如何终止云代码功能?
- python - Tkinter 标签小部件显示变量两次
- html - html中的tablesorter js(404未找到)
- javascript - Console.log 不显示任何输出(NodeJs)
- python - 我在学习 python 练习时遇到“None is not callable”错误
- python - 使用 Beautiful Soup 抓取 Amazon 数据时出错:对象返回无
- java - 我的随机数生成器总是返回零
- sql - 尝试在 Postgres 中运行子查询