背景

由于个人项目中的设置经常与vcpkg中默认的triplets中的设置不一致,在以前我们只能将自定义的triplet文件添加到VCPKG_ROOT/triplets中并使用install --triplet=CUSTOM_TRIPLET来满足个人的需求。

而现在使用overlay triplets就可以解决这类问题。

经典模式

vcpkg现在对于install、update、upgrade、export与depend-info命令提供了选项 --overlay-triplets,您可以将该选项添加这些命令之后来指定库覆盖安装的其他路径。

可使用如下命令:

 vcpkg install port --overlay-triplets=<port_dir>

其中port_dir可以是相对路径,也可以是绝对路径。同时还可以通过多个--overlay-triplets选项来支持多个路径。

使用示例

下面以在linux上构建动态库为例:

一、经典模式中使用自定义triplets

1. 创建自定义triplet文件

假设在custom-triplets目录下创建一个x64-linux-dynamic.cmake的文件,其中custom-triplets是与vcpkg同级的目录。

root@linux003:/home/Nancy/code# mkdir custom-triplets

文件目录结构如下:

|vcpkg
|--triplets/x64-linux.cmake
|custom-triplets
|--x64-linux-dynamic.cmake

为了操作方便,直接复制已经存在的x64-linux.cmake文件中的内容到x64-linux-dynamic.cmake

root@linux003:/home/Nancy/code# cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-dynamic.cmake

然后修改custom-triplets/x64-linux-dynamic.cmake文件

root@linux003:/home/Nancy/code# vim custom-triplets/x64-linux-dynamic.cmake

使其符合如下内容:

# root@linux003:/home/Nancy/code/custom-triplets/x64-linux-dynamic.cmake
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic) # This changed from static to dynamicset(VCPKG_CMAKE_SYSTEM_NAME Linux)

2. 使用--overlay-triplets选项来构建动态库

root@linux003:/home/Nancy/code# ./vcpkg/vcpkg install sqlite3:x64-linux-dynamic --overlay-triplets=custom-triplets

运行命令,输出如下:

root@linux003:/home/Nancy/code# ./vcpkg/vcpkg install sqlite3:x64-linux-dynamic --overlay-triplets=custom-triplets
Computing installation plan...
The following packages will be built and installed:
    sqlite3[core]:x64-linux-dynamic -> 3.35.5
Detecting compiler hash for triplet x64-linux-dynamic...
Could not locate cached archive: /root/.cache/vcpkg/archives/98/98cf1c246250381df7d8d596571db77e83aa3857.zip
Starting package 1/1: sqlite3:x64-linux-dynamic
Building package sqlite3[core]:x64-linux-dynamic...
-- [OVERLAY] Loading triplet configuration from: /home/Nancy/code/custom-triplets/x64-linux-dynamic.cmake
-- Downloading https://sqlite.org/2021/sqlite-amalgamation-3350500.zip -> sqlite-amalgamation-3350500.zip...
-- Extracting source /home/Nancy/code/vcpkg/downloads/sqlite-amalgamation-3350500.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at /home/Nancy/code/vcpkg/buildtrees/sqlite3/src/3350500-adf155e1e1.clean
-- Configuring x64-linux-dynamic-dbg
-- Configuring x64-linux-dynamic-rel
-- Building x64-linux-dynamic-dbg
-- Building x64-linux-dynamic-rel
-- Performing post-build validation
-- Performing post-build validation done
Stored binary cache: /root/.cache/vcpkg/archives/98/98cf1c246250381df7d8d596571db77e83aa3857.zip
Building package sqlite3[core]:x64-linux-dynamic... done
Installing package sqlite3[core]:x64-linux-dynamic...
Installing package sqlite3[core]:x64-linux-dynamic... done
Elapsed time for package sqlite3:x64-linux-dynamic: 35.08 s

Total elapsed time: 35.42 s

The package sqlite3:x64-linux-dynamic provides CMake targets:

find_package(unofficial-sqlite3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)

注意: 若日志中出现如下信息表示使用的是自定义triplet。

-- [OVERLAY] Loading triplet configuration from: /home/Nancy/code/custom-triplets/x64-linux-dynamic.cmake

如果想remove已经安装的自定义triplet的库,需要在remove命令中传入自定义triplet所在的路径。例如:

./vcpkg/vcpkg remove sqlite3:x64-linux-static --overlay-triplets=custom-triplets

二、经典模式中使用覆盖默认的triplets

假如我们想在linux上实现像在windows上使用的triplet,来构建动态库(x64-windows)或者静态库(x64-windows-static),可以使用--overlay-triplets来覆盖默认的triplet。

x64-linux: 构建动态库

x64-linux-static:构建静态库

1. 创建overlay triplets

为了方便操作,可以将custom-triplets/x64-linux-dynamic.cmake重命名为custom-triplets/x64-linux.cmake,然后拷贝默认的x64-linux .cmake到custom-triplets文件夹下,同时将文件名称重命名为x64-linux-static.cmake。

文件目录结构如下:

|vcpkg

|--triplets/x64-linux.cmake

|custom-triplets

|--x64-linux-dynamic.cmake--> x64-linux.cmake

root@linux003:/home/Nancy/code# mv custom-triplets/x64-linux-dynamic.cmake custom-triplets/x64-linux.cmake
root@linux003:/home/Nancy/code# cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-static.cmake

2. 使用--overlay-triplets选项来覆盖默认的triplets

root@linux003:/home/Nancy/code# ./vcpkg/vcpkg install sqlite3:x64-linux --overlay-triplets=custom-triplets

运行命令,输出如下:

root@linux003:/home/Nancy/code# ./vcpkg/vcpkg install sqlite3:x64-linux-dynamic --overlay-triplets=custom-triplets
Computing installation plan...
The following packages will be built and installed:
    sqlite3[core]:x64-linux-dynamic -> 3.35.5
Detecting compiler hash for triplet x64-linux-dynamic...
Could not locate cached archive: /root/.cache/vcpkg/archives/98/98cf1c246250381df7d8d596571db77e83aa3857.zip
Starting package 1/1: sqlite3:x64-linux-dynamic
Building package sqlite3[core]:x64-linux-dynamic...
-- [OVERLAY] Loading triplet configuration from: /home/Nancy/code/custom-triplets/x64-linux-dynamic.cmake
-- Downloading https://sqlite.org/2021/sqlite-amalgamation-3350500.zip -> sqlite-amalgamation-3350500.zip...
-- Extracting source /home/Nancy/code/vcpkg/downloads/sqlite-amalgamation-3350500.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at /home/Nancy/code/vcpkg/buildtrees/sqlite3/src/3350500-adf155e1e1.clean
-- Configuring x64-linux-dynamic-dbg
-- Configuring x64-linux-dynamic-rel
-- Building x64-linux-dynamic-dbg
-- Building x64-linux-dynamic-rel
-- Performing post-build validation
-- Performing post-build validation done
Stored binary cache: /root/.cache/vcpkg/archives/98/98cf1c246250381df7d8d596571db77e83aa3857.zip
Building package sqlite3[core]:x64-linux-dynamic... done
Installing package sqlite3[core]:x64-linux-dynamic...
Installing package sqlite3[core]:x64-linux-dynamic... done
Elapsed time for package sqlite3:x64-linux-dynamic: 35.08 s

Total elapsed time: 35.42 s

The package sqlite3:x64-linux-dynamic provides CMake targets:

find_package(unofficial-sqlite3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)

注意: 若日志中出现如下信息表示默认triplet已经被自定义triplet所覆盖

-- [OVERLAY] Loading triplet configuration from: /home/Nancy/code/custom-triplets/x64-linux.cmake

manifest模式

请参照Overlay Ports设置。

可以通过向cmake命令添加参数VCPKG_OVERLAY_TRIPLETS或者在msbuild项目选项Additional Options中传入--overlay-triplets=<path>实现在manifest中使用overlay triplets。

请参考Overlay ports中的manifest模式设置。

参考:https://github.com/microsoft/vcpkg/blob/master/docs/examples/overlay-triplets-linux-dynamic.md

首次发布于:https://www.cnblogs.com/vcpkg/p/15019952.html

VCPKG 特性 - Overlay triplets相关推荐

  1. 记一次node+react项目发布过程(一)--webpack生产环境打包优化

    先附上项目效果: 项目地址: http://47.105.144.204/index github: github.com/dsying/reac- 未优化之前 webpack配置文件 const p ...

  2. vcpkg安装_微软牌包管理器vcpkg更新及路线图计划

    蝎子 vcpkg是一套跨平台,开源的C/C++库管理器,今天的这篇文章是有关vcpkg主题的2020年4月博文更新.在这篇文章中,我们将分享有关vcpkg 2020.04发布版本的一些信息以及vcpk ...

  3. Angular CDK Overlay 弹出覆盖物

    为什么使用Overlay? Overlay中文翻译过来意思是覆盖物,它是Material Design components for Angular中针对弹出动态内容这一场景的封装,功能强大.使用方便 ...

  4. 配置overlay(overlayfs)根目录挂载构建debian

    据wikipedia描述overlayfs在2014年融入linux内核,其轻量和易用特性已在openwrt中应用,但在debian发行版本中还没有直接使用overlayfs挂载根目录的启动选项.增加 ...

  5. Cilium 首次集成国内云服务,阿里云 ENI 被纳入新版本特性

    作者:清弦 阿里云技术专家,主要负责 ACK 容器网络设计与研发,阿里云开源 CNI 项目 Terway 主要维护者,Cilium Alibaba IPAM 负责人 ​ 背景 ​ 近期 Cilium ...

  6. 父元素设置overflow: overlay; 或 overflow: scroll; 或 overflow: auto; 如果子元素超出父元素内容,父元素会被子元素超出部分撑大至子元素同样大小

    发现 父元素设置overflow: overlay; 或 overflow: scroll; 或 overflow: auto; 如果子元素超出父元素内容,父元素会被子元素超出部分撑大至子元素同样大小 ...

  7. position定位 响应式_使用 Vue3 实现双盒子定位 Overlay

    之前说过,使用  可以很优雅的把某个组件渲染到根节点之外的节点,同时使其渲染的内容不丧失响应式和对应的生命周期函数调用.那么基于此,用  实现相对于某一元素的 Overlay . 实际上,这篇文章跟 ...

  8. overlay 如何实现跨主机通信?- 每天5分钟玩转 Docker 容器技术(52)

    上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...

  9. Overlay Surfaces (覆盖表面)

    覆盖表面(Overlay Surfaces) 覆盖表面是具有特殊硬件支持能力的表面,通常用于显示活动视频.录制视频或静止位图而不需要位块传输到主表面或改变主表面的内容.对覆盖表面的字此完全由硬件提供, ...

  10. 关于Video Renderer和Overlay Mixer

    原文作者: 陆其明 整理日期: 2004/12/27   大家知道,Video Renderer (VR)是接收RGB/YUV裸数据,然后在显示器上显示的Filter.为提高计算机画图性能,根据你计算 ...

最新文章

  1. 绑定CPU逻辑核心的利器——taskset
  2. Codeforces Round #490 (Div. 3)【完结】
  3. Mysql 5.7 json
  4. 【转载】世界各地对BI的应用状况
  5. Python | 创建员工类别
  6. android剪切 图片,android 剪切图片
  7. 核心指导网络由任务编码器_指导新编码员的最佳做法
  8. python怎么分析数据结构_《利用Python进行数据分析》第五章-pandas的数据结构介绍...
  9. php 明天凌晨,用php判断时间戳来输出刚刚,分钟前,小时前昨天和时间
  10. 优先升级鸿蒙系统的华为(含荣耀)手机,优先升级鸿蒙系统的华为(含荣耀)手机:是这48款!有你的吗?...
  11. VCGLib中邻接关系的实现
  12. Microsoft.Web.Mvc Assembly 说明
  13. 计算机四级网络工程师笔记
  14. PHPWord通过docx模板替换标签,最终生成pdf文件
  15. 安卓手机误删文件恢复
  16. html打砖块游戏制作,JavaScript实现打砖块游戏
  17. vue form表单数据提交
  18. android文件管理器——文件检索
  19. OpenCV的Masking操作
  20. 计算机ms office 基础知识教程,计算机等级考试二级MS-Office基础知识教程.doc

热门文章

  1. 程序设计的感悟——大道至简
  2. 《掌控习惯》读书笔记
  3. python三维图形注释_python – Matplotlib:注释3D散点图
  4. 汇编程序——根据开关状态在7段数码管上显示数字或者字符
  5. blog增量追加ing~(1/10阶段)ctf oj
  6. 1. 2020年《DeepMind&UCL深度学习讲座》第1讲:机器学习和AI入门【中文字幕】
  7. 这是互联网变得越来越敌对的7种方式
  8. 有哪些基于苹果HomeKit的全屋智能家居组合
  9. Spring AOP中Introduction的使用
  10. 2020-12-11静态路由汇总实验