vcpkg添加自定义包安装

news2025/1/23 4:55:35

文章目录

    • 前言
    • 新建overlay-ports
    • 编写baseline.json
    • 编写openssl.json
    • 编写配置
      • 修改vcpkg.json
      • 修改portfile.cmake
    • 挂载安装
    • 后话

前言

vcpkg收集了很多C++的包,可总是会有没收录进去的,以openssl 3.0.0版本举例,这个版本vcpkg没有收录进去,本教程教你vcpkg自定义添加


新建overlay-ports

在vcpkg根目录下创建一个命名为overlayports的文件夹(其实可以随意命名,后面教程都是用这个来举例),在overlayports中新建两个文件夹,分别为ports, versions

# overlayports目录结构
├─ports
│  └─openssl
└─versions
    └─o-
    │ └─openssl.json
    └─baseline.json

编写baseline.json

overlayports/versions目录下新建baseline.json, 保存以下内容

{
  "default": {
	"openssl": {
      "baseline": "3.0.0",
      "port-version": 0
    }
  }
}

port-version 是版本控制来的,默认为0即可,比如3.0.0有两个小版本,就分别为0,1



编写openssl.json

因为openssl是o字母开头,所以在在overlayports/versions目录下新建文件夹o-, 在o-文件夹中新建openssl.json

{
  "versions": [
    {
      "git-tree": "3e5163bcf41573dd2bc14130db52e77599f4132d",
      "version": "3.0.0",
      "port-version": 0
    }
  ]
}

git-tree 字段需要是commit的hash,但是也可以随意填

git add ports/openssl
git commit -m "ports: add openssl"
git rev-parse HEAD:ports/openssl

这样就可以计算出来了


编写配置

这个我建议直接把原来portsopenssl整个文件夹拷贝过来

修改vcpkg.json

version 修改成3.0.0port-version键值改成0,其他不变就行。

{
  "name": "openssl",
  "version": "3.0.0",
  "port-version": 1,
  "description": "OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.",
  "homepage": "https://www.openssl.org",
  "license": "Apache-2.0",
  "dependencies": [
    {
      "name": "vcpkg-cmake",
      "host": true
    },
    {
      "name": "vcpkg-cmake-config",
      "host": true
    },
    {
      "name": "vcpkg-cmake-get-vars",
      "host": true
    }
  ],
  "features": {
    "tools": {
      "description": "Install openssl executable and scripts",
      "supports": "!uwp"
    }
  }
}

修改portfile.cmake

这个改动有点大,设计到一些命令,例如github上的openssl是没有上传3.0.0代码的,官网才有,本身是用vcpkg_from_github拉源码,就要改成vcpkg_download_distfile., 原本打的patch是不可以用的, 需要额外使用vcpkg_extract_source_archive命令来打patch, SHA512需要下载到本地计算获得

(Get-FileHash .\openssl-3.0.0.tar.gz -Algorithm SHA512 | Format-List).Hash.ToLower()
  • 保存即可
if(EXISTS "${CURRENT_INSTALLED_DIR}/share/libressl/copyright"
    OR EXISTS "${CURRENT_INSTALLED_DIR}/share/boringssl/copyright")
    message(FATAL_ERROR "Can't build openssl if libressl/boringssl is installed. Please remove libressl/boringssl, and try install openssl again if you need it.")
endif()

if(VCPKG_TARGET_IS_EMSCRIPTEN)
    vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
endif()

if (NOT "${VERSION}" MATCHES [[^([0-9]+)\.([0-9]+)\.([0-9]+)$]])
    message(FATAL_ERROR "Version regex did not match.")
endif()
set(OPENSSL_VERSION_MAJOR "${CMAKE_MATCH_1}")
set(OPENSSL_VERSION_MINOR "${CMAKE_MATCH_2}")
set(OPENSSL_VERSION_FIX "${CMAKE_MATCH_3}")
configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake.in" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)

vcpkg_download_distfile(
    ARCHIVE
    URLS "https://www.openssl.org/source/old/3.0/openssl-${VERSION}.tar.gz"
    FILENAME "openssl-${OPENSSL_VERSION}.tar.gz"
    SHA512 1fdf769ef69631eb802671a9e0bb3a01883d58282f651986212983c2d7c9d3499dabe99a6dee0411e997e6fcfa6f682b121b7698596de0d6c78850c2200241b1
)

vcpkg_extract_source_archive(
        SOURCE_PATH
        ARCHIVE "${ARCHIVE}"
        PATCHES
            disable-apps.patch
            disable-install-docs.patch
            script-prefix.patch
            windows/install-layout.patch
            windows/install-pdbs.patch
            unix/android-cc.patch
            unix/move-openssldir.patch
            unix/no-empty-dirs.patch
            unix/no-static-libs-for-shared.patch
)

vcpkg_list(SET CONFIGURE_OPTIONS
    enable-static-engine
    enable-capieng
    no-ssl3
    no-weak-ssl-ciphers
    no-tests
)

if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
    vcpkg_list(APPEND CONFIGURE_OPTIONS shared)
else()
    vcpkg_list(APPEND CONFIGURE_OPTIONS no-shared no-module)
endif()

if(NOT "tools" IN_LIST FEATURES)
    vcpkg_list(APPEND CONFIGURE_OPTIONS no-apps)
endif()

if(DEFINED OPENSSL_USE_NOPINSHARED)
    vcpkg_list(APPEND CONFIGURE_OPTIONS no-pinshared)
endif()

if(OPENSSL_NO_AUTOLOAD_CONFIG)
    vcpkg_list(APPEND CONFIGURE_OPTIONS no-autoload-config)
endif()

if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
    include("${CMAKE_CURRENT_LIST_DIR}/windows/portfile.cmake")
    include("${CMAKE_CURRENT_LIST_DIR}/install-pc-files.cmake")
else()
    include("${CMAKE_CURRENT_LIST_DIR}/unix/portfile.cmake")
endif()

file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${SOURCE_PATH}/LICENSE.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)


挂载安装

执行vcpkg的安装命令时,需要输入挂载的路径

vcpkg install --overlay-ports=overlayports/ports/openssl openssl:x64-windows-static
  • Log
PS E:\vcpkg> vcpkg install --overlay-ports=overlayports/ports/openssl openssl:x64-windows-static
Computing installation plan...
The following packages will be built and installed:
    openssl[core]:x64-windows-static -> 3.0.0 -- E:\vcpkg\overlayports/ports/openssl
Detecting compiler hash for triplet x64-windows-static...
-- Automatically setting HTTP(S)_PROXY environment variables to "127.0.0.1:7890".
Restored 0 package(s) from C:\Users\NueXini\AppData\Local\vcpkg\archives in 114 us. Use --debug to see more details.
Installing 1/1 openssl:x64-windows-static...
Building openssl[core]:x64-windows-static...
-- Installing port from location: E:\vcpkg\overlayports/ports/openssl
-- Downloading https://www.openssl.org/source/old/3.0/openssl-3.0.0.tar.gz -> openssl-.tar.gz...
-- Extracting source E:/vcpkg/downloads/openssl-.tar.gz
-- Applying patch disable-apps.patch
-- Applying patch disable-install-docs.patch
-- Applying patch script-prefix.patch
-- Applying patch windows/install-layout.patch
-- Applying patch windows/install-pdbs.patch
-- Applying patch unix/android-cc.patch
-- Applying patch unix/move-openssldir.patch
-- Applying patch unix/no-empty-dirs.patch
-- Applying patch unix/no-static-libs-for-shared.patch
-- Using source at E:/vcpkg/buildtrees/openssl/src/openssl--79f2f1128b.clean
-- Found external ninja('1.11.0').
-- Getting CMake variables for x64-windows-static
-- Getting CMake variables for x64-windows-static
-- Prerunning x64-windows-static-dbg
-- Building x64-windows-static-dbg
-- Prerunning x64-windows-static-rel
-- Building x64-windows-static-rel
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/lib/pkgconfig/libcrypto.pc
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/lib/pkgconfig/libssl.pc
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/lib/pkgconfig/openssl.pc
-- Using cached msys-mingw-w64-i686-pkg-config-0.29.2-3-any.pkg.tar.zst.
-- Using cached msys-mingw-w64-i686-libwinpthread-git-9.0.0.6373.5be8fcd83-1-any.pkg.tar.zst.
-- Using msys root at E:/vcpkg/downloads/tools/msys2/9a1ec3f33446b195
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/debug/lib/pkgconfig/libcrypto.pc
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/debug/lib/pkgconfig/libssl.pc
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/debug/lib/pkgconfig/openssl.pc
-- Installing: E:/vcpkg/packages/openssl_x64-windows-static/share/openssl/usage
-- Installing: E:/vcpkg/packages/openssl_x64-windows-static/share/openssl/copyright
-- Performing post-build validation
Stored binary cache: "C:\Users\NueXini\AppData\Local\vcpkg\archives\52\52725e8d8c97f33f16c3d5b775ac6942aa930813223f43e0faa0b77d8af5b265.zip"
Elapsed time to handle openssl:x64-windows-static: 2 min
Total install time: 2 min
The package openssl is compatible with built-in CMake targets:

    find_package(OpenSSL REQUIRED)
    target_link_libraries(main PRIVATE OpenSSL::SSL OpenSSL::Crypto)

这样就完成了openssl3.0.0的安装


后话

以上就是vcpkg添加自定义包安装的全部教程,如果还是看不懂的话可以参考下面文章:

  1. https://devblogs.microsoft.com/cppblog/registries-bring-your-own-libraries-to-vcpkg/

  2. https://zhuanlan.zhihu.com/p/354382196

  3. https://learn.microsoft.com/zh-cn/vcpkg/

enjoy ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

String的不可变特性

1 问题 如何理解“String是不可变的,但是可以变”? 2 方法 (1)String的不可变特性体现在内容和长度 首先在idea中点开查看String这个类是如何定义的 可以看到这样一行代码:private final char value[]; 正是因为这个数…

基于Simulink单载波链路射频波束成形仿真

一、前言 此示例展示了如何在 Simulink中对 IEEE 802.11ad单载波链路进行建模,其中包括具有射频波束成形功能的相控阵天线。 二、介绍 此模型模拟具有射频波束成形的 802.11ad 单载波 (SC)链路。多个数据包通过自由空间传输,然后射…

图片转为pdf怎么弄?简单几个步骤轻松转换

在日常工作和生活中,我们常常需要将图片转换为PDF格式的文档,以满足资料存档和共享的需要。虽然转换过程看起来有些麻烦,但只要选择正确的工具和方法,就能轻松完成。 下面,小编将为大家介绍两种常见的将图片转换为PDF…

生成对抗网络(GAN) 理论概念、改进模型与练习题

生成对抗网络(GAN) 生成对抗网络的基本概念模型提出模型类型模型功能模型目标模型结构模型训练模型实质模型缺点模型生成器的构造模型损失函数 生成对抗网络的改进模型DCGANWGANWGAN-GPACGAN 生成对抗网络的题型 生成对抗网络的基本概念 模型提出 2014…

Grad-CAM的详细介绍和Pytorch代码实现

Grad-CAM (Gradient-weighted Class Activation Mapping) 是一种可视化深度神经网络中哪些部分对于预测结果贡献最大的技术。它能够定位到特定的图像区域,从而使得神经网络的决策过程更加可解释和可视化。 Grad-CAM 的基本思想是,在神经网络中&#xff…

体验编写Vue框架项目实例的详细步骤2(包括git仓库使用,element-ui的使用和eslint校验关闭)

1.在src目录下新建pages文件夹用来放页面。新建文件Index.vue,首页 在Index.vue中搭建vue基本结构。 在element官网Element - The worlds most popular Vue UI framework中选择想要的组件。 我选择是Container布局容器。选择好样式点击显示代码复制相关代码至Ind…

【安全运维】小微企业的安全运维工具用哪款好?

即使是小微企业,也同样面临着安全运维的困扰,同样面临着数据泄露、资产难管理的问题,因此选择一款合适的安全运维工具是非常必要的。那你知道小微企业的安全运维工具用哪款好? 小微企业的安全运维工具用哪款好? 【回…

全景视角下的世界探索——三维全景地图

引言:随着数字技术和虚拟现实技术的发展,三维全景地图已成为一种新型地图展示方式,深受人们的关注和喜爱。三维全景地图以其真实逼真、互动性强、展示效果好等特点,正在越来越多的领域得到应用。 三维全景地图的特点 1.真实逼真 …

Elasticsearch(黑马)

初识elasticsearch ​​. 安装elasticsearch 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的…

【云原生概念和技术】1.2 云原生技术概括(下)

如果想了解或者学习云原生的友友们,欢迎订阅哦~🤗,目前一周三更,努力码字中🧑‍💻…目前第一章是一些介绍和概念性的知识,可以先在脑海里有一个知识的轮廓,从第二章开始就…

Talk预告 | ICLR‘23 北京大学楼家宁:针对鲁棒聚类问题的接近最优核心集

本期为TechBeat人工智能社区第485期线上Talk! 北京时间3月29日(周三)20:00,北京大学信息科学技术学院——楼家宁的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “针对鲁棒聚类问题的接近最优核心集”,届时将针…

nodejs+vue在线课程管理系统

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本在线课程管理系统有管理员,教师,学生。管理员功能有个人中心,学生管理,教师管理,在线课程管理,课件信息管理&#x…

maybits就是持久型框架

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Ob…

使用HiBurn烧录鸿蒙.bin文件到Hi3861开发板

使用HiBurn烧录鸿蒙.bin文件到Hi3861开发板 鸿蒙官方文档的“Hi3861开发板第一个示例程序”中描述了——如何使用DevEco Device Tool工具烧录二进制文件到Hi3861开发板; 本文将介绍如何使用HiBurn工具烧录鸿蒙的.bin文件到Hi3861开发板。 获取HiBurn工具 通过鸿蒙…

简单的Shell脚本实现自动化构建部署-适合前后端分离的小网站

1. 背景 大家在生活中经常会自己写一点小代码。然后部署在公有云的服务器上。但是一般像阿里,腾讯等服务商,提供的机器内存并不是很大。如果想装入一个jenkins之类的服务,会比较占用CPU和内存的资源。但是人手的部署又是比较麻烦的。所以我这…

相较于传统fNIRS,时域矩量fNIRS在多大程度上提高了对大脑活动的估计?

导读 意义:电子技术的进步使通道更多的时域功能近红外光谱(TD-fNIRS)得到发展。由于高阶时域矩的深度选择性,时域矩量分析已被提出用于提高对大脑的敏感度分析。研究者提出了一种综合时域(TD)矩量数据和辅助生理测量(如短分离通道)的一般线性模型(GLM)&…

OpenMV初体验

Openmv初体验 OpenMV IDE OPENMV4-STM32H743 import sensor, image, time sensor.reset() sensor.set_pixformat(sensor.RGB565) # 图像彩色/灰白 sensor.set_framesize(sensor.QVGA) # 图像大小 sensor.skip_frames(time 2000) # 几秒后开始或跳过几帧 cnt 0 #sensor.set_…

【初试复试第一】脱产在家二战上岸——上交819考研经验

笔者来自通信考研小马哥23上交819全程班学员 先介绍一下自己,我今年初试426并列第一,加上复试之后总分600,电子系第一。 我本科上交,本科期间虽然没有挂科但是成绩排名处于中下游水平。参加过全国电子设计大赛,虽然拿…

【机器学习】P20 模型的诊断 - 验证集

从本节博文开始,将会有几篇博文的内容探究的是如何对模型进行评估,模型是好是坏?模型能否拟合? P20 (本篇)模型的诊断,验证集P21 正则化P22 过拟合和欠拟合的探究2,偏差与方差P23 一…

【内摹访谈】谈谈AI爆发前夜的B端设计

本文来自摹客产品设计团队(MPD)的设计专栏“内摹访谈”。专栏介绍:专栏名称来源于西方美学理论「内摹仿说」,意指审美活动与摹仿活动紧密相连,审美不只针对表象动作,其核心在于由物及我,从表观带…