Conan Package Manager for c++ in Practice @ Core c++ (Mevasserat Ziyyon, Israel) Meetup

2021年4月7日

< 1

柯南包管理器的c++实践
演讲描述:c++的Conan包管理器在简单和高级开发环境中都很有用。加入Conan团队,通过使用ConanCenter提供的OSS库和工具的简单演示,以及一个更完整的演示,展示如何创建和上传包含针对不同平台的不同二进制文件的包到私有存储库。此外,还将了解许多其他独特和创新的高级柯南功能。

点击这里查看幻灯片

演讲者

杰瑞Wiltse

杰瑞Wiltse

柯南团队的高级软件工程师

Jerry Wiltse是柯南开发团队的高级软件工程师,自2016年以来一直致力于C和c++的工程构建。他是一个狂热的开源爱好者,同时也非常关注企业开发环境。他也是JFrog学院柯南学习轨道的叙述者和创造者。

视频记录

好的,谢谢你,adi和inball
感谢大家今天邀请我们
谢谢在座的各位
主治医生我叫杰瑞·威尔西
我是开发人员
今天在jfrog的柯南团队
我会说
提供一些高层次的解释
关于柯南的基本原理
但也要经过一些实际的代码
还有现场练习
来反映和柯南合作的意义
在实践中
二维码中的链接显示在这里
这张幻灯片将带你去
所有关于这个演讲2022世界杯阿根廷预选赛赛程的资源
幻灯片和链接将发布在那里
视频最终一旦有了视频
被发布
你也可以给这个演示打分
参加抽奖就能获胜
柯南的t恤,现在我们将发布
链接
在缩放聊天中也是如此
感兴趣是因为我不会停留在
幻灯片
很长时间,不过也有可能
我们非常期待您的反馈
我们很乐意送你一件t恤
我们也想和你们分享
我要去的另一个活动的日期
说到柯南
这就是jfrog的年度devops会议
叫swampa
所以我们将在网上举行活动
今年举办了两次
一个是美国的,一个是欧洲的
中东和非洲时区
这里显示的是emea的日期
ari也有一些额外的信息
分享
关于沼泽和一些很棒的建议
好了,阿里
如果你愿意,请便
如果你准备好了,是的,不,我很感激
谢谢,谢谢,杰瑞,非常
短暂的哦
我不知道你们有多少人来了
但之前的沼泽
这是一个令人惊叹的全球devops
会议和
我们要做一个虚拟的
那一年肯定会成功的
更多人可以接触到
6月2号是主要的
会议一天
那天是免票日,但我们也
想做点特别的
还有Meetup社区
我们所做的就是放一些
聊天说明
但我们有一个深度潜水技术
教程的一天
这将在六月举行
第三,这是有代价的
涉及到
但是,对于那些在聚会上的人来说
社区
呃,呃,我们要在
会议
我刚刚给了你指示
聊一聊如何免费享受这一天
如果你点击这个,请随意
链接代码已经为您提供了
你要做的就是去
注册流程
按照我刚才说的做
选择
注册正确,你是
我要去
49天免费,所以
好好享受吧,谢谢杰瑞,很棒的建议
谢谢,很好
资源
好吧,我们可以继续
练习现在是有趣的部分
对于这些练习,我创建了一个
可再生的环境
其中包含所有的文件
例子,我将用它来运行
命令
这个环境的目标就是
任何人都可以克隆并运行存储库
或克隆存储库并运行
练习,而
在他们自己的机器上
命令都包含在内
在这个演示的PDF中
这就是你开始工作所需要的一切吗
值得注意的是,它是基于docker,所以你
是否需要安装docker
但是docker确实让它变得非常简单
做这样的事情,这就是原因
它被选中了
只要你有码头,它应该
在Windows MAC或Linux上工作
所以如果你尝试一下
有什么困难吗
使用本地机器上的演示
请随意打开一个github问题
在存储库上
现在是单词警告
你知道这是现场演示,所以当你
当你做实时代码演示时
特别涉及docker的练习
事情可能会出错,他们已经走了
过去很糟糕,所以如果我们有
技术上的困难
我们提前道歉,我们
将继续
试着慢慢解决这些问题,谢谢
因为你有耐心
所以我选择a
会话现在是终端
我想确保你们都能看到
这很好
现在我要运行这些命令
我之前讲过
滑动,我们都要
一起去冒险,一起去
证明它有效,就没有
slidewear
你知道的,证明给我看
这可以由人类来完成,所以这是
要跑
可能要花一点时间

我们在这里运行,这样就建立了
Docker图像,它将采取一点
可能在你的机器上更久
如果你在本地运行这个,但它不是
即使在最坏的情况下也要这么久
这给了我们一个终端Linux
虚拟机运行一些柯南
命令和运行conan客户端
或者说是码头集装箱
另一个docker容器
运行
它将主办我们的
仓库我们的conan仓库
我们将使用
好吧,有个问题
这个练习
Windows上支持吗应该支持吗
可以在Windows、Linux和MAC上工作
只要你有docker和can
运行docker可以运行这些练习
在我开始深入研究之前
有些例子我确实想
简要介绍柯南
如果你还不知道柯南是个
c和c的包管理器
此外,它是开源的,并且是公开发布的
麻省理工学院的执照
它也是多平台的,这意味着它可以
可在Linux、Windows和MAC OS下运行
实际上其他地方也一样
Python基本上可以这样运行
各种风格的Unix都可以运行它
大家都知道这样做吗
所以柯南得到了广泛的支持
设计用于支持
CNC中所有流行的构建系统
+ +
以及自定义构建系统
这在企业中并不少见
软件开发
柯南很稳定,也就是说
专业内没有突破性的变化吗
版本
也就是说,包被构建了
对于柯南1.0
将工作的任何未来版本
柯南1.0或1.x
如果有重大变化
柯南或者包裹都不会
直到柯南2.x
被释放了,所以它确实是
履行永远的诺言
永远的稳定保证
柯南也很活跃,它有几个
全职开发人员的赞助
作者:jfrog
同时也是一个非常活跃的用户
社区
提交数十个pull请求
每个月
我们的松弛频道有超过1200
成员
它是最活跃的组织之一
c中的通道
加上社区闲置,所以这是值得的
注意的是
柯南团队终于创造了
多互动
柯南自学课程
这些课程都是免费的
由jfrog在线提供
培训平台
被称为jfrog学院,所以如果你
喜欢去
学习得更深入,见识得更多
练习
你可以访问下面的链接
academy.m.si-fil.com
做这些练习
在我的聊天中有一些很棒的问题
柯南团队的一些成员
在这里
但是他们会面对所有这些问题
如果有的话
我们需要更详尽的回应
把这些放到最后,这样我们就保存了
最后是q
所以柯南的高层设计
比较简单吗
其他知名的包管理器
如NPM pipi maven
Apt和yum它具有共同的概念
例如本地存储库
用于本地柯南操作
和包操作和远程
用于共享包的存储库
具有易于使用的上传和下载
命令和功能
还有一个中央调节的公众
存储库
对于开源包,那就是
被称为柯南中心
所以artifactory是一个服务器应用程序
由jfrog提供
哪些可以托管远程conan存储库
这就是我们今天要讲的内容
我们所有的练习都是
集装箱码头工人
同样值得注意的是柯南中心简直就是一个
托管在artifactory上的Conan存储库
但它在云中托管了很多东西
资源和2022世界杯阿根廷预选赛赛程CDN分配如此
柯南中心以同样的方式托管
你可以举办你自己的私人聚会
存储库
托管和节制
提供服务和所有费用
由jfrog维护
所以虽然柯南和其他类似
软件包管理器
在这些方面具有较高的水平
体系结构
它的包装模式非常独特
这就是有趣的地方
这个盒子里的绳子
包裹
用户通道0.1
这是一个我们称之为a的例子
柯南的食谱参考
这是最简单的
简单的逻辑标识符

对于连接中的包,这是什么
它们看起来像
这是一个独特的地方
菜谱参考
与其他包管理器相比是
它所代表的
任意数量的独立物理二进制文件
具有独特的
建立构型,这样你就有了一个
菜谱参考
你可以建造任何数量的物理
与二进制有关的
并存储在引用后面
包模型
其中一个标识符代表任何
唯一构建配置的数量
这是柯南的主要创新吗
这就是柯南如何实现的
简单来说
柯南为每个人分配了一个唯一的id
独特的配置
这个唯一的id称为包id
柯南就用了这个
字符串用于各种东西
建造和包装过程
例如,包id被用作
目录的基本部分
结构
用于在本地存储conan包
缓存,它也是
在服务器实现上可见
它也被用于很多其他事情
但这张图表描述了如何做到这一点
典型的构建差异
我们在构建中看到的差异
比如构型
如果您正在构建一个共享库
相对于静态库
所有其他设置都是一样的
你还是会得到两个不同的二进制
所以最后还是有两个不同的
包id
这两个包的id会被跟踪
并分别储存和转移
这就是理论
背后的基本创新
柯南的
包模型,所以客户端和服务器
也要使用包装
Id作为匹配机制时
上传和下载捐赠二进制文件
从远程存储库
对于柯南里的大多数运算
你是含蓄的或
显式指定构建
配置
并获取相应的包id
每个包
一次就把它们全部下载下来
一旦你构建或下载了一个
特定二进制包
在您的本地机器上,二进制文件可以是
使用在
任何数量的项目在同一
配置相同的机器
所以有了柯南,就没必要重建了
相同的
库二进制文件多次使用
相同的配置
把它用在很多不同的
消费项目
对于openssl这样的软件,你可以
只构建一次或每次一次
配置
你可以使用openssl二进制文件
任意数量的消费项目
所以这个缓存提供了一个非常有效的
二进制共享策略
就像我说的,柯南用了这个结构
的输入
计算这些包id
这里有两个关于柯南的深入例子
建立我们通常
在柯南中称为profile
这是基于文本的格式
还要将概要文件指定为命令行
参数
或者你可以把两者混合
用户可以将这些文件存储为文本文件
在这个格式中,然后传递
各种conan命令的文件名
所以这个更容易处理
的方法来
与时传递这些值
将这些值传递为
个人观点
所以我们将使用这两种配置文件
在我们今天即将进行的练习中
我们想证明柯南的能力
跨平台的能力
所以我们要做的就是
在Linux上做一次
然后在Windows上用a
微软的编译器
关于概要文件的最后一个注意事项是
它们还允许你做其他事情
哪个不是很强大呢
你会认为
构建配置
它有点不同
配置文件允许您指定构建
工具
你想要哪一种
构建
这是根据构建要求完成的
剖面图
就像这里用黄色标出的
我们指定要使用的示例
Cmake 3.19.0版本的所有版本
在我们的图中需要cmake
这意味着柯南的存在
创建的包含cmake的包
3.19.0
conan将使cmake可执行
从那个包裹里
可通过路径环境获得
变量
贯穿整个包构建过程
因此你可以使用构建
需要
作为安装这些的替代方案
构建工具,如cmake和其他工具
直接进入你的系统和用户
系统
所以对于非常分散的团队或者
对于拥有
想要有工具一致性
自动构建服务器和
像这样的事情
创建构建工具的conan包
而且
通过conan构建使用它们需要
特性可以
提供很多优势,让它成为一个
更容易得到一致性
保证
也能推动事情的发展
同一时间
所以关于构建还有很多要说的
需要,但我们会用这个
在我们今天的练习中,我们会讲到
等我们到了那里再详细介绍一下
所以柯南的另一个主要创新
我们想提哪一个
这里是它的抽象层
提供超构建系统
在团队中开发应用程序时
这是典型的
一个典型的要求是
开发者应该能够
来构建整个应用程序
源代码,包括其所有依赖项
比如图书馆和其他东西
一路上许多CNC加库
和应用程序
有多个开源依赖
不幸的是
开源CNC加加依赖
往往具有独特而复杂的构建
与之相关的系统和脚本
构建系统
所以学习所有这些都是一门专业
CNC负担
加上那些想要专注的开发者
关于代码
不是在神秘的构建脚本和构建
系统
以及随之而来的复杂性

所以柯南想要减轻这种负担
开发人员
这是使用包的一个大目标
经理
作为一个抽象的一般曾经
开源项目已经打包
与柯南
柯南的用户再也不需要了
直接与构建系统交互
只是为了使用它只是为了消耗它
相反,用户可以直接安装
项目与柯南安装
Command和柯南会处理所有的
与构建的必要交互
系统的后台后台
场景
这是柯南的一个很大的用途
这是价值的很大一部分
命题
好的,之前我说过我们可以开始
现在我们可以开始练习了
互动练习
第一个练习我们要
展示一个看似简单的目标
哪一种是开源
来自柯南中心的依赖项并使用它
在我们的cmake项目中
值得注意的是,开源
依赖项恰好是boost regex
这是相关的,因为得到和
使用boost库由来已久

对大多数人来说,这是一个不小的努力
开发人员
我们来看看柯南是怎么做到的
过程更简单
我们要做的关键命令
从这个练习中吸取教训
柯南安装那是根本吗
我们要用到的特性
这是有关的文件
锻炼只是为了把所有的东西都放进去
开放的
我们有一个名为
Regex。CPP
其中包括促进正则表达式HPP
这就是源头的依赖关系
水平
在这种情况下,我们宣布我们
需要增强版本1.74.0
我们用的是c make构建
你可以在这里看到
在柯南文件。txt框中,所以柯南
file。txt是我们指定东西的地方
与柯南相关
这是我们的依赖关系
制作精美包装
这里我们明确地说我们
想要提供给我们的依赖
项目
以一种与cmake兼容的方式
查找包特性
在这里,我们看到cmake列表
该文件告诉cmake如何构建我们的

我们可以看到我们确实在用
Cmake的find package
功能定位升压和升压正则表达式
具体地说
使用所需的关键字
这就证明了我们注意到了
首先是这个
Cmakelist文件不包含任何内容
柯南特有的或专有的
它是一个普通的cmake列表文件
这表明任何现有的
Cmake项目使用find package
现在可以使用柯南的依赖关系了吗
不需要做任何
修改cmakelist文件到
这样做
这一点值得注意,因为事实并非如此
总是这样
cmake团队不得不非常努力地工作
在社区工作了几年
实现这一能力的完整
透明度
使用cmake的查找包功能
下面是我要讲的命令
运行
同样,这些命令在
有了幻灯片之后
你可以自己运行它们
执行命令还是柯南
安装
这里的connect install命令会
下载列出的所有依赖项
在柯南的文件里
它还会下载所有的
boost的传递依赖关系
正则表达式需要的任何东西
以及任何符合这些要求的东西
Require将全部下载
柯南剧自动播放
下载后安装命令
conan将生成所有依赖项
一些文件
在即将到来的cmake构建中使用
其中一个文件是activate.sh
我们在下一个命令源中使用
激活。sh,你可以看到
这里是第四行
还记得我们讲过构建吗
在cmake中需要激活。sh
脚本
是从
柯南包在它存在的地方
到我们当前的shell,它预写入
Bin目录下的
可执行文件是
到路径环境变量和
这就是我们如何使用cmake from
我们的柯南套装
所以conan会生成shell脚本
允许你使用其中的内容

在你的壳再次
关于构建有很多要说的
需要和这些脚本生成器
所以我们解释了很多
叫做
中的虚拟环境特性
jfrog学院的课程
所以如果你想了解更多
这是柯南节目很酷的一部分
当然可以去看看里面的课程
学院
但现在我们只使用它
在那之后,我们就运行正常的程序
构建系统命令
我的构建系统会自动
查找并使用所提供的依赖项
的柯南
基于生成的文件
柯南了
在本例中,我们将运行cmake。点,
配置我们的项目
一个非常传统的cmake工作流
然后是cmake - dash - build
来执行构建,这将
创建
一个叫做regex下划线的可执行文件
exe
当我们用输入运行它的时候
字符串在这里
我们会得到一个输出
由boost正则表达式转换
图书馆,所以在这种情况下
我们正在做的演示是这样的
我们取
以。开头的电子邮件主题字符串
单词subject冒号
然后重冒号
它使用boost regex the进行解析
前缀部分
它吐出一个字符串说
关于柯南,它只是变换
你的问题,请继续,肖,谢谢

首先,我和柯南一起工作
至少
我研究了它,然后用我自己的方法
做了一段时间的项目,我觉得
伟大的
我想确认一下有件事
看看我理解得对不对
在第三行中实际安装
使用的配置文件
Gcc7,但是你含蓄地假设
GCC 7在您的环境中
就像你说的这种情况
你柯南不能保证
实际上GCC 7会运行,这是真的
这是真的,也是一个很好的观点
这让我很困惑
所以我想
来检查一下,好的,值得指出

正如我们所说,我们为构建提供了cmake
使用构建要求处理
我们在这里不做同样的事情
示例用GCC编译器或任何
相关的
工具,链接器,存档器之类的东西
这样做是可能的
这是我们所知道的
企业团队在做
尤其是交叉编译器
人们已经包装了
他们的编译器到conan包和
这样使用它们
但是很多其他组织
他们
类型附带的编译器
操作系统
你知道的,尤其是关于
GCC,但是在Windows端
你知道这是另一回事
但这是一个很好的观点
所以,是的,我们实际上只是在标注
现在说
这将是GCC 7
我们正在指导柯南这个
将是gc7
由我们来管理
环境在我们的例子中是码头工人
容器
这个gcc7实际上就是安装的
在环境中,这取决于我们
那部分不在波段内
说得很好,谢谢
好,现在把壳拿出来
再来一次
我们来运行这个命令
已经讲过一次了
希望
当我讲这些的时候就有意义了
我们要做一个目录
叫做构建Linux和CD
因为就像我之前说的那样
使用conan安装生成文件
命令
我们想要那些你知道的
这将是一个
特定构建的文件夹
配置
然后我们要做同样的事情
Windows的东西,所以我们不想
希望这两个文件夹是分开的
这里我运行柯南安装程序
有相当多的事情需要指出
在这个过程中
我先暂停一下
这里你可以看到它是向上看的
然后向上看
Zlib和bzip2和lib图标v
然后是cmake当我们只列出
Boost作为依赖项
和cmake作为一个构建要求柯南采取
关怀的艰难过程
对传递依赖管理如此
这是非常重要的一部分
包管理器提供的内容的
一般
这里要指出的另一件事是
我们正在下载boost 174
如我们所见,密钥文件在这里
叫做conan package。tgz
如果你仔细观察就会发现
大小是20兆字节
这显然是对我们所有人的证明
我们大多数人都知道
传统上,这种刺激要大得多
超过20兆字节
它实际上下载了什么
是非常具体的单一构建吗
的boost是一个静态库构建的
使用GCC 7
在Linux发布模式下,64位
这是一个二进制
头文件是唯一包含的内容

这就是柯南如何提供了很多
更高效的体验
也许比其他方法
获取和
使用boost,经常下载巨大
文件或整个源代码
并且重新禁止建造
*所以
非常高效,它完成了下载
很快就好了
这里的输出显示了所有内容
柯南产生的
如果你熟悉cmake和
找到包
系统你知道它是基于每一个
库和每个组件
有一个find。cmake文件
所以我们为每个人生产一个
树中的依赖关系
我们可以看看这些,但是
我们今天不会
但是它们在洋流中
目录
这些都是由a c和a生成的
生成器叫做柯南
发电机
命名为c的make find包和
脚本,如我之前提到的shell
“activate.sh”和“deactivate.sh”脚本
它们是由一个叫做
虚拟环境
所以柯南可以用任何数字
生成任意数量的文件
一次构建系统的数量
只需添加生成器列表
这是一个非常
可扩展性是一个非常重要的特性
柯南的一部分
所以我们要利用第一个
生成名为activate.sh的脚本
在这之前,我要输入哪个
cmake
并显示我确实安装了cmake
在这个系统上,用户是benemake
如果我用cmake版本
但是我激活后它是3.9.1
我输入cmake,你们现在可以看到
cmake被定位了
类的深嵌套子目录中
柯南缓存
所以这证明了你不需要
理解整个柯南缓存
这只是证明了我们是
现在使用cmake from
那个位置,当我输入c make
破折号版本
这里不是3.9,而是3.19
这是一个非常新颖的部分
现在有了新的cmake,我们将运行
配置步骤
我们在这里指定了两个参数
我会轻敲向上的箭头
最后一个论点值得注意
这告诉cmake在电流中查找
目录
对于其他cmake模块,例如
柯南的作品
这就是柯南和cmake的由来
明显地找到柯南的特征
并不是完全透明的
一个额外的命令行参数
它是透明的,因为我们没有
修改任何cmake文件来执行此操作
很好,现在让我们来构建
我们的项目和cmake文件
很好,所以它构建了一个名为regex的目标
exe
让我检查一下要做的聊天
我确定我没有错过任何东西
为了在Linux上运行它,我们

不好意思,我们有
我们运行regex。/ regex exe和
然后我们把这个字符串传递给它
它会变换这个字符串
如果我不
这就是我说的输出
我们对柯南的看法
所以它会解析出信息
这就相当快了
用助推器产生一点
可执行的
包管理器是一个
非常简单的演示非常有效
我们还想运行一个名为
sourcedeactivate.sh
如果我输入which
道路又
正如你可以想象的那样,对不起
你可以看到我们现在已经还原了
当前shell返回使用状态
系统中的cmake是虚拟的
环境
类似于python虚拟环境
如果你熟悉这些,但是
它允许你添加和删除东西
从conan包从你的shell
好,现在我将CD返回到
源存储库
现在我们简要回顾一下
幻灯片和一个非常及时的问题
突然出现在聊天里
关于它使用的难易程度
柯南与visual studio在Windows上
我们来看看这里
和我们刚才做的一样
在linux上
这次是在Windows上,这次
它是为visual studio设计的
仍然使用cmake作为构建系统哦
好了,我们开始没有cemic井
这完全是另一个问题
但这是可能的,这是一个过程

在精神上是一样的,但这很好
问题
我用绿色标出了部分
这些命令与
Windows帐户
但如果不是的话,其他的一切
用绿色突出显示的是相同的
所以我会简单地说
,嗯
让我看一下
所以目录名是不同的
配置文件名称
又不同了,这取决于我们
保证我们有visual studio 16
安装而不是
使用source时,我们使用call命令和
它不是一个。sh脚本,而是一个
蝙蝠脚本
我们用PWD来代替
我们有这个
CD环境变量
告诉cmic看电流
目录
另外,当你运行cmake时
对于Windows visual studio项目,你
必须指定一个配置,所以我们
指定发布配置
有些不同
当我们执行二进制的时候
语法略有不同
运行它
但程序还是和我们一样
传递相同的字符串,我们仍然得到
相同
输出,我们仍然停用我们的外壳
我们来做一下
好了,现在我们来
还是Shell
我将保留这个Linux shell
我将打开一个新的壳
这部分CD
我们将CD放入我们的存储库
进入练习目录,我们会
做目录
用于在里面建立Windows和CD
现在我们将执行conan安装命令
这又是一个神奇的指令
这里的重点是柯南安装
给它一个特定的轮廓
这就快了一点,因为我
之前在我的机器上下载的
这是一个展示这一点的好机会
这告诉了我们推力
Bzip库图标v这个呃这个输出是
都是在他们不需要的藏身处找到的
这样我们就不用下载了
等一下
这就回到了我之前提到的观点
关于重用二进制文件
一旦你在一个项目中使用了它们
它们就在你的缓存里
开发机器可以重用它们
任意数量的项目的二进制文件
只要它使用相同的配置
仍然生成
所有需要的文件
找到包
文件。cmake而且的脚本s
到脚本中添加cmake到路径
不好意思,复制粘贴是很困难的
所以我们调用我们输入的激活脚本
在哪里
在Linux或Windows上,我们输入where cma
这里你可以看到
宁愿把它放在前面
到conan目录,但是
它还显示了另一个版本的
Cmake存在于不同的路径,但是
现在我们来做cmake配置
你可以看到它使用的是visual studio 16
正如我通过配置文件名称所指出的那样
我将运行构建命令,然后我
将执行
生成的二进制文件在这里
可以看到输出,如果我缩小a
一点
Regex下划线exe我将运行它
在发布目录中,我们得到
输出,我们给它一个字符串,然后得到
我们的产量
好了,通常我会停下来
中间的问题
嗯,练习,但我知道我们有一点
有点呃
在一个压缩的时间尺度上,我们有
有些东西我们想去
阿迪在最后提到我们想
为自己腾出时间
我会在最后回答问题
所以如果我没记下来,请一定要记下来

如果你没有在
闲谈,聊天
好吧,我们这样做了,它起作用了
技术上有困难,但这是一种胜利
现在我们要移动
我们来快速总结一下
我们刚刚学到了什么过程
消费柯南软件包
如果你不这样做,那柯南节目还有用例吗
想用柯南做别的事
你可以用它来获取开源
第三方依赖关系
并在构建系统中使用它们
没有
任意耦合您的开发过程
进一步到柯南
执行此操作的命令是conan install
这将获得依赖项和
为构建系统生成文件
消费oss软件包可以很简单
就像我们刚刚说的,c +
加上
相对来说不是这样的吗
直到最近
Conan可以提供依赖项和
给这些人的信息
任何构建系统,这包括
它有一个相当复杂的
依赖管理特性称为
找到包
但它也包括自定义构建
系统和
您可以为它生成一个文本文件
依赖关系
里面的信息只要你知道就行
构建系统需要的格式
您可以创建一个生成器进行生产
的信息
对于该构建系统自定义生成器
哪个是最常用的
conan的可扩展性特性
以及几乎所有的企业组织
我们一起工作,一起讨论
定期写至少一篇
自定义生成器的不同用途
情况下,所以
它很容易进入容易做
还有一些
柯南终于来了,我们真的很兴奋
Center为。提供了许多包
热门CNC加加项目
其中包括预编译的二进制文件
很多不同的平台
配置
但不是全部,如果你如果你在做
开发一个arduino或者一个
覆盆子π
我们不会有二进制
需要,但如果你用的是主流
编译器和操作系统
Windows和visual studio 2019
或者使用GCC 89的Linux,或者更新的
我们通常会有一个很好的配置
预先构建,供您尝试
但是如果我们没有二进制
建造你所需要的
重要的是每个人
要明白这是额外的
conan install的标志,该标志为
破折号
建立破折号建立标志
让用户选择全部或部分构建
的依赖关系
所以飞
即使你只是不相信
柯南中心的二进制
想要使用预编译的二进制文件
这也是通过考试的另一个原因
你可以告诉柯南
下载时也从源代码构建
这个过程需要更长的时间
但最后得到的所有二进制数
将简单地构建与您的编译器
你的工具集
在你的机器上有很多
你可能会用到

您的组织可能有一个政策
针对预编译的二进制文件
诸如此类,这样你就能理解
柯南安装
我们也希望你能理解
的力量
的破折号构建标志
好的,现在我想谈谈
柯南的食谱
我想解释一下食谱是什么
然后举一些例子
但简单来说柯南菜谱就是
conan将读取的Python类
并执行以创建柯南

显然我们使用了一些柯南软件包
这就意味着有一些食谱
那些包裹在某处有人
写了
这就解决了所有的困难
与构建系统的交互
让我们看看它是什么样的
这是柯南节目菜谱的一个例子
正如我们所说,这是一个python类
并具有多项标准
方法名称
这些方法名都对应于
工序中的传统步骤
构建一个c
例如项目
在requirements方法中声明
我们的项目依赖
这可能不太常见
传统的构建过程
但是在导出源方法中
定义柯南将需要哪些资源
要捕捉才能做构建
所以也许你不需要
捕获自述
或者詹金斯的档案
这种事你只需要
捕获c文件和头文件
这就是你需要建立的
这就是出口来源所做的
在generate方法中,我们生成
构建系统的文件
其中包含了我们需要的所有变量
回想一下我们生成了一堆
找到的
将cmake脚本打包
放置在generate方法内
在构建方法中继续前进
调用构建系统
你知道是叫cmake还是叫call
Ms build或
调用make来构建源代码
变成我们想要的二进制
最后在打包方法中我们
捕获已构建的二进制文件
我们把它们复制到一个包里
目录,包括
共享库静态库头
把所有生产出来的东西都归档
我们需要传递给我们的
消费者
那么我想我应该说现在终于进来了
package info方法
我们声明包的内容
目录
我们刚刚捕获和填充的
消费者
举个例子,如果我们捕获一些
静态库package info方法
将列出
这些静态的名称是什么
所以对于
消费者的链接,然后呢
目录名是否在
子目录
我们可以在哪里找到这些图书馆
与also we连接
它定义了头文件的目录
还有其他变量,比如see
预处理器指令之类的
这样环境变量就可以了
这里定义
还是packageinfo方法
描述了
所需要的包的内容
消费者
柯南会调用这些方法
按适当的顺序
当您运行创建过程时
这是另一个食谱的例子
这个有方法
定义
所以它不那么抽象

我们简化了一些
注意打包的项目
这个食谱是一个cmake项目
所以它利用了几个cmake
特定的helper类
柯南团队提供的
食谱更容易读懂

我们会展示另一种方法
下一个
首先在需求方法中
我们声明依赖关系
这就是语法
你称之为self。requires
然后列出依赖项
接下来在电竞资源方法中吧
在这种情况下,我们会
捕获工作中的所有文件
目录
作为构建的潜在来源
说你可以过滤掉那些文件
不重要
但是这颗恒星很容易证明
接下来,generate方法使用两个helper

哪个生产。c制造文件
柯南变量
这包括所有的信息cmake
将需要为即将到来的构建
就像我们说的,它创建了发现
boost.cmake
它还创建了一个工具链文件
还有其他变量吗
你传递给柯南的设置
侧写,我们就不详细讲了
关于这些
Generate this是它产生这些的地方
文件
在构建步骤中,我们将消费
这些文件
因此build方法使用另一个助手
叫做cmake
助手类,它叫cmake
当我们跑的时候,这个会
cmake。配置和cmake。构建方法
在柯南的配方中
货架上的cmake可执行文件
这些帮手让事情变得简单多了
要正确获取命令行语法,请使用get
空格和引号
避免常见错误,但你可以
self。run和
将您的命令行字符串写入原始
和你想要的cmake完全一样
不使用辅助器,我们会看到
下一张幻灯片
但最终它会把所有的
正确的参数,它得到
使用帮助器是有帮助的
特别是在lee的cmix案例中
最后还使用了打包方法
cmake助手
要做的安装方法和这个
实际运行cmake安装目标
所以有很多cmake
项目定义了所谓的安装
目标,它定义了运行的类型
时间
所产生的工件的布局
应该去
柯南让我们可以利用这一点
目标
通过这样做,给这个cmake install
函数
在蓝绿色的音符里
可以看到
它设置了cmake安装前缀
变量中相应的目录
柯南缓存
充分利用它,这是一个很好的方法
这招很有用
最后,正如我所说,我们需要的包装信息
来声明文件放在
包文件夹
我们放了什么文件,这样我们就有了
包括目录
我们,我们把它列为集合
包括将被翻译的错误

破折号I编译器标记我们将
参见后面的消费者项目
库目录列表将会
翻译成传统的GCC
负l作为lib目录
所以我们把所有的lib都放到lib中
目录,最后
libs是库的列表
我们生产
在这里我们可以看到我们的名字
包名为my lib
它会产生静电
图书馆叫我的图书馆
这里没有显示,但是我们可以
假设是这样
下面这里,当我们说libs =
我的lib我们说链接器需要
链接到我的lib
这就是这就是这个包产生的东西
是一个名为
我的libmylib。在Windows上是这样的
我lib.lib
这就是抽象的声明
这包裹里的东西
我们这些发电机是什么
将此转换为代
构建系统特定的文件
一些很棒的互动发生在
聊天,好问题,好答案
谢谢大家的参与
这是a的第三个例子
食谱,然后我们就我们就跑
根据此食谱创建包
这个和前一个很相似
你所看到的例子使我们
想要证明
当你
使用自定义构建系统
柯南没有提供任何帮助
这是非常常见的
你要用柯南
从专业角度来说,你的食谱可能看起来像
如果有的话,再像这样一点
非cmake项目如此优先
需求和导出声明
它们是一样的,很好
对于generate方法,您需要
编写自己的函数
如果您使用的是自定义构建系统
从柯南那里取了变量
并将它们写入文本文件
格式化您的构建系统可以读取的格式
也许您的构建系统读取yaml文件

文本文件或点制作文件
你知道make或make的意思
导数
同样,编写定制也很简单
发电机,或者你可以
把函数写在这里
信息带我们过去
你的生成函数中的变量
你可以把它们转换成
文本文件,你可以把它们写入
这样做是磁盘的目的
生成命令
我们没有展示一个完整的生成器,但是
我们确实证明了你需要一个
然后在构建方法中您将需要
调用自定义构建系统
以及任意数量的其他cli应用程序
你可能会想逃跑
许多构建方法不仅仅是一个
简单的命令
他们有10 20 30个命令长
乐器和编排一个习俗
构建系统
但你可以做任何你想做的事
构建系统都在
构建
方法,你拥有python的所有功能
听你差遣,还有很多帮手
conan的方法
用于运行和读取文件
写文件
这是非常灵活的方式
属性中定义构建过程
如果我们没有
像cmake提供的那样安装目标
我们需要声明并指定是什么

建立系统生产和我们如何
想要储存
我们包中的结果文件
文件夹
我们可以共享静态库
图书馆,我们可以把它们放进去
任何我们想要的文件夹布局
在包文件夹中,我们在这里做
自我。复制函数是一个助手
你会看到的函数
柯南剧里一直都有
灵活的可选
源和目标的参数
目录
它是基于模式的,所以你可以
找到所有的头文件
的结果目录和
全扔了
进入到包含目录中
只找到存在于
源目录
如果有头文件在
根这些将被跳过
因此我们对DLL文件使用相同的模式
Lib文件dilip文件so文件
我们把它们放到dll中
传统上目录
其余的文件进入lib目录
传统上来说
使用模式的打包方法
这是一种通用的文件夹结构
为了目的地
是一种提供跨平台的方式吗
方法,它将捕获
此构建的所有输出都是no
不管它运行在什么平台上
这是一种。取a
凌乱的输出布局
在任何数量的操作系统上
或者将其组织到一个包文件夹中

一个通用的结构,这就是我们
在这里做
但事实并非如此
不管我们想要什么样的文件夹结构
使用
储存那些文件,因为我们可以
描述它
在包信息方法中,我们
希望在这种情况下我们
模拟了cmake的安装由也就罢了
使用相同的结构
头文件被包含
lib目录
所有的lib都进入了lib目录
还有这些句子
被命名为有一个图书馆和
它叫我的lib,但我们可以
定义任何我们想要的文件夹结构
在包装方法中
只要我们把它正确地描述下来
在package info方法中
这可能是抽象的,它需要
一些练习
一旦你在写食谱,看看如何
算出来了
希望你们现在能理解了
这是一个过程
这个食谱是按什么顺序做的
最终,最终的方式
柯南捕捉文物并提供
他们
消费者,好的
很多关于柯南食谱的东西,但是
核心,柯南最基本的部分
所以我们真的希望人们能理解
当他们在柯南中心寻找
比如他们所看到的
当他们看到的时候,给他们一些背景
这些食谱可以帮助你理解
发生
现在我们要创建一个
柯南包和值得注意的是
与前面的示例相同的项目
我们要替换conan file。txt
用柯南file.py
我们要定义所有的
conan中需要的方法
点乘py,然后我们将创建a
从配方中包装
我们要去掉的关键命令
这是柯南,这是柯南
创建一个包
提醒一下,我们的源文件是命名的
regex.cpp
它依赖于boost正则表达式
coin和file.py会显示这一点
下一个
但我们只想显示cmake列表
和我们做的一模一样吗
我们在第一个练习中用过
我们的
真正的柯南食谱
使用
正如你看到的,当你
前一种是一般情况
显示了我们需要的所有方法
当我们有一个真正简单的包
食谱变得更简单了
而且只看我们会更容易
使用其中的四种方法
这只需要四个

我们给它起了个合适的名字
将命名为regex 0.1.0
我们不打算讨论
设置行今天但这简单
呃定义了一些东西
进入包id计算
最后我们说我们想
生成cmakefind包生成器
和虚拟的env文件一样
做了
在消费活动中,但我们是
说我们需要它来
构建方法
好吧
正如我们前面提到的,我们将使用
柯南创建命令
使用我们的配方来构建我们的包
从它创建包
在创建我们想要的包之后
想办法证明它是有效的
说实话,这个练习有点
如果我们只会跑,那就太无聊了
conan的create命令是一个
这不是我们想要的
显示
这还不足以证明我应该这么做
在我们奔跑之后
柯南创建了剩下的这些命令

一种演示可执行文件的方法
作品
来自柯南节目,就像我们
从conan缓存运行cmake可执行文件
我们将测试我们的可执行文件
正则表达式可执行
从它的包位置之后
被创建
这就是我们的目标和原因
我们在第二行运行conan create
然后我们创建一个名为run的目录
我们把它CD进去
然后我们就像
我们在之前的例子中做过
现在都消费了,所以我们要做柯南吗
安装
我们的包引用的正则表达式我们
生成虚拟Ian
运行env生成器,我们同样传递它
档案,因为我们说我们想使用
我们用Linux gcc7构建的
发布模式
然后我们使用相同的源activate
技巧
在我们的路径上获得可执行文件,然后我们
运行它,我们得到相同的输出
我讲得有点快
时间的目的
所以我很抱歉,我们将采取
最后的问题
好的,我们的会话在哪里
我们将回到Linux shell
左边
我们将CD到

再次进入示例目录
这是创建包的例子
我们会跑
柯南创建命令,就像我们之前做的那样
抱歉,我们之前讲过
侧写和之前一样
使用
这就会
按食谱上说的做吗
收集它将下载的资源
需求
它会运行构建,然后它会
打包构建的结果
然后把它们放到本地缓存中
希望你们能看到
cmake被执行
这是cmake log
然后在最后这里
看到
包创建并打包了一个文件
Regex exe下划线exe
现在我们要运行
可执行并确保
它做我们期望它做的事
所以我们运行conan install,现在我们给出
引用是因为
在这个日志里,它会打印出完整的
参考
这样创建的包的
它结合了名称和版本
还有我们通过的两个参数
命令行
现在当我们运行我们的
安装
我们传递相同的引用
说我们想要安装它
用虚拟运行嫉妒生成器
进入当前目录
试试
我们可以看到
生成虚拟
还是环境脚本,如果我
激活
我输入哪个哦
我应该注意一下
我只是简单地运行它
该命令
如果我做哪个regex exe
就像cmake的例子一样
在我们的道路找到它之前
可执行的
在柯南缓存中
所以我们不需要通过就可以运行它
整条路都是对的
好了,我们传递了字符串
我们得到了
这是意料之中的结果,太棒了
我们会再一次禁用它
环境
CD返回
好的,我现在看下一张幻灯片
我们将再次为Windows做同样的事情
再次的部分
这个演示是为了说明Comp的复杂性
的跨平台性质和功能
柯南
以及工作流程有多么相似
在Windows, Linux和MAC OS上
还是一样的,我们只有绿色
我们有不同的亮点
不同的概况不同
文件夹
语义和语法略有不同
打电话给
二进制,但或多或少
过程在精神上是相同的
让我们快速做一下
离开
Linux shell,现在进入Windows
壳牌再次
记住正确的命令
好,我们现在在Windows下
柯南命令与柯南命令相同
创建命令没有区别
Windows和Linux,这部分很好
我们讲得很快,因为最后我们
真的想要展示
最后一件事我们谈过的那件事
大概在很早的时候
双星是如何共存的呢
一边
在单个包引用下
好吧,我们看看下面
包被创建
我们用这个包了一个exe文件
文件名称
它调用了cmake,所有的都是the
相同
它打包了一个exe文件,现在我们
想要使用它吗
我去看看聊天记录,如果
有什么
我错过的重要的东西
(音乐)
我明白了,这很好地说明了
有一个
实际上有不止一个虚拟
环境生成器,我们已经使用
二,它们略有不同
嗯,我确实轻松搞定了,所以
很高兴看到有人问这个问题
在聊天中被称呼
所以我们要在我们的
运行Windows目录
要做到这一点,我们只需要产生
激活运行脚本
我们这样做也是值得注意的
在我们跑步之后
激活脚本总是放一个

壳上的前缀告诉我们
我们主动加载了
柯南环境没有提到
之前说过,但就是这样
好的,我们在Windows上得到了同样的结果
你可以看到,我们先把它停用
在我运行了停用程序之后
这个conan run env前缀现在消失了
我们也做了同样的事情
在Windows中我们运行可执行文件
我们得到了相同的结果
交叉
平台包装和建设现在如此
这很令人兴奋
快速总结一下我们做了什么
我们展示了食谱的格式
看起来是这样的
我们浏览了每一个标准
方法
用于创建您拥有的包
需求导出源
收集资源,然后进行构建
和包
藏物,然后你描述什么
你构建并打包了这个包
信息
还有一些其他的
可选的方法
你可以在文件里读到
详见其他培训课程
这,这是最
基本
而基本要求大多
食谱
最后,是的,柯南称之为
方法
还有其他的工作流程
有时可以直接调用构建方法
你可以只调用source方法
对于不同的工作流程,但这是
创造的核心过程
从零开始打包
最后一题差不多做完了
现在是上传
我们刚刚创建到远程的包
存储库
这包括从Linux上传
从Windows编译和上传
构建环境
所以我们将有效地上传两个
同一个包的不同二进制文件
我们来看看会发生什么
首先我们来回顾一下这个列表
远程存储库
然后我们将添加一个新的存储库
在docker环境中
仓库
自动创建的
我们一起开码头的时候
环境,所以我们不打算去
通过创造的过程
一个关于artifactory的新仓库
还有其他课程吗
但没有什么艺术性
适合这个演示是因为
它可以免费使用
它是专门为
托管柯南库并制作它
容易
在这样一个小地方
在那个服务器上
我们有一个名为conan local的存储库
我们要上传我们的包到
我们来做一下
如我所说,我们将从列出
现有存储库
我们应该看到柯南中心,然后
属性添加新的存储库
这就是我们的名字
在这里调用它
然后我们会给出的url
我们的演示环境
因为这是一个私人遥控器
存储库,我们要上传
打包到它
我们必须按顺序提供证件
这样做
所以conan user命令是你
提供的凭证
提供给自己的远程存储库
写访问
显然你不能上传到柯南
中心
你甚至连证书都没有
如果你不小心这么做了
它不会让你接下来我们
应该可以上传我们的你好吗
我们的正则表达式包到存储库
最后在最后我们会
使用柯南搜索命令
搜索我们的遥控器,看看是什么
远程服务器上的结果如下所示
这是最后一个
那一刻
结果就是我们会看到
我们已经构建了这些包
他们
在一个地方共存的
共享的远程服务器
我们的团队
好的,我们开始吧
我把壳拿出来
我们将回到Linux
环境
全屏,不好意思
清晰的
所以如果我做conan远程列表,我们应该
就像我说的柯南中心
柯南中心默认出现当你
安装柯南是唯一的官方
安装的存储库
默认的
然后我们将使用kona远程添加
命令,我们将添加
名称artifactory和url

对应于我的docker容器你
集装箱码头工人
如果在本地运行,应该是一样的
Url具有相同的端口
假设你什么都不改变
在你启动它之前
好,让我们运行柯南远程列表一次
更多的
我们有吗
Artifactory在这里排名第二
现在我们可以指定一个用户和
人工密码
默认为“Admin”和“password”
艺术品证书
现在我们应该试着上传柯南
上传我们的regex包
制作并上传所有二进制文件
这里我们看到上传regex
已经上传了regex的引用
0.1.0的演示和一个单一的二进制
一个来自Linux的二进制包

到远程存储库
让我们快速进行柯南搜索
对于那件关于艺术的事,我们应该
看到一个二进制
是的,我们看到我们有一个现有的食谱
这里列出了一个包id
搜索命令是一个非常好的输出
也可以在json设置
对于体系结构,构建类型为
编译版本
我们用的c + +标准库
以及依赖项列表
非常棒的反馈
很好的输出
重要的是说
对于工业用途我也
你用来创建的每个特定标志
你自己的包裹会
也要在场,是的,是的
它非常,它需要很多
信息
它产生了很多信息
输出会变得很长
还有过滤输出的方法
这一点值得注意
现在在我们的Windows机器上
确保
我们仍然只有一个二进制

抱歉,我们去清理一下
从这里开始
好了,我们的目标
是在传统上上传的吗
如果你有多个环境
你有能力构建的平台
机器建立在不同的
平台
你最终会上传同样的内容
打包但不同于许多二进制文件
不同的机器与您的构建
通常是基础设施
在这里进行模拟
我将再次添加artifactory
我将提供一次证件
再一次。
然后我们上传正则表达式

现在我们看到它上传了
regex食谱,但它也上传
一个二进制包这个包这个包
id
它和我们的不一样
在Linux机器上构建
那么现在当我们做搜索的时候如果我们交叉
我们应该用手指
二看,是的
所以
有个问题,我
道歉
现在我们可以看到,如果我们
进行搜索
柯南搜索正则表达式我们有包
id
这是Windows的版本,这是我们
看,这就是visual studio
Windows visual studio 16发布md
构建
这是依赖关系
我们看到一个单独的包id
从Linux版本开始
我们之前讲过
在许多环境中你会有4个8
16
一个包有32个不同的二进制文件
如regex取决于多少
建立目标和数量
配置
您需要为您的团队构建和测试
这又回到了最初的问题
点在原创的创新
柯南
哪个是单菜谱参考可以
包含任意数量的二进制文件
二进制文件是分开管理的
分别下载和上传
这是一个非常高效和智能的系统
过程
如果我们有时间的话我想我们有时间
嗯,阿迪,你有时间限制吗
我们是不是在接近
你对时间有什么看法
我可以跳过去展示它的样子
artifactory好
你可以再休息几分钟
好的,我直接跳到
我只是想把幻灯片做完
如果我们有时间,我们可以在
最后
我不想我们确实有几个
幻灯片在这里
所以这个练习我们上传了柯南

我们上传了
多次打包
来自不同的机器,他们
都是在同一个配方下出现的
参考
我们展示了一些简单的远程命令
管理
我们展示了柯南中心总是来的
安装
默认情况下,嗯
我们确实展示了本地柯南缓存
conan下存在哪些数据可以
由任意数量的本地项目共享
我们实际上展示了一些构建
早些时候
但是关于本地和偏远的想法
库策略
和其他包装很相似吗
经理们,我们觉得这非常
重要的
因为这提供了一个实用的和
熟悉开发人员经验
不只是开发者,还有
建造工程师和
他们的工作是建立
自动化构建管道
通常情况下,他们会同时处理多个问题
多种语言的包管理器
柯南也适应了这个过程
一种方式,他们
习惯是很有用的
它使工具变得更好
之类的东西
Ci服务器和其他工具交互
更多的
而不是说如果我们做了如果我们没做

这些抽象的东西,所以最后我们
演示了人工是如何提供的
免费本地托管conan存储库
建立一个
实例,并开始上传包到

刚开始的时候,我真的不知道
安装人工设备
我在一个容器里开始制作
使用docker命令
我马上就能开始了
上传和下载到它
这对你和你的
开发团队也是如此
这就是我要做的所有练习
今天很遗憾,因为有
这么多不同的特征,我们
都没来得及露面
说了这么多,下面是一些地方
你可以去了解更多
特性
在conan dot IO的主页上你可以
找到链接
到以下每一个资源2022世界杯阿根廷预选赛赛程
有其自身的价值吗
这取决于你的环境
你的兴趣和需求,我们希望你
觉得他们很有帮助
如果你想和我聊天的话
柯南团队
或者其他柯南用户,你可以找到我们所有人
在松弛
在CPP lang社区中有一个
通道
献给柯南标签柯南所以
你可以在那里注册,然后问一下
问题和公正
如果需要,直接给我们任何一个人发信息
最后,我真的想感谢
阿迪和在场的所有人
感谢你允许我们展示,我希望
会议是愉快的和
信息丰富的
我希望您能够下载并运行

为你自己在当地做示范
我很想听听谁说过
任何麻烦
或者成功,如果在任何情况下如果你觉得
可以在推特上提到我们
领英让我们知道你的想法
但在这一点上我很乐意接受
有任何问题和评论
反馈