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

2021年4月7日

< 1

Conan Package Manager for c++ in Practice
演讲描述:c++的Conan包管理器在简单和高级开发环境中都很有用。加入柯南团队,看看它是如何工作的,通过一个简单的演示,使用来自ConanCenter的OSS库和工具,以及一个更完整的演示,展示如何创建和上传一个包,包括不同平台的不同二进制文件到一个私有存储库。此外,学习许多其他独特的和创新的先进柯南沿途功能。

点击此处查看幻灯片

演讲者

杰瑞Wiltse

杰瑞Wiltse

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

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

视频记录

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

我们在这里运行,这样就建立了
Docker镜像需要一点时间
在您的机器上可能会更长
如果你在本地运行,但它不是
即使在最坏的情况下也要这么久
这给了我们一个终端,Linux
虚拟机运行一些柯南
命令和运行conan客户端
或者是码头容器
另一个docker容器是
运行
人工工厂将举办我们的
库我们的柯南库那个
我们将使用
好吧,有个问题
这个练习
Windows支持吗?是的,应该支持
在Windows Linux和MAC上工作
所以只要你有能力
运行docker你可以运行这些练习
在我开始深入研究之前
我想要举出一些例子
简单介绍一下柯南
如果你还不知道柯南是
c和c的包管理器
此外,它是开源的,并且已经发布
有麻省理工学院的许可
它也是多平台的,这意味着它可以
适用于Linux、Windows和MAC操作系统
其他地方也一样
Python基本上可以这样运行
各种风格的Unix都可以运行它
你知道这样做吗
所以柯南的支持者非常广泛
旨在支持
所有流行的构建系统在CNC
+ +
以及定制构建系统
在企业中屡见不鲜
软件开发
柯南很稳定,也就是说
major中没有突破性的变化吗
版本
也就是说,包构建
对于柯南1.0
将适用于任何未来版本的
柯南1.0或1.x
如果有重大变化
柯南或包裹,它不会
直到柯南2.x
被释放了,所以它是
履行永恒的承诺
semver的稳定性保证
柯南也很活跃,它有几个
获得赞助的全职开发者
jfrog慷慨解囊
同时也是一个非常活跃的用户
社区
它提交了几十个拉取请求
每个月
我们的空闲频道有超过1200个
成员
它是最活跃的一个
c中的通道
加上社区闲散,这是值得的
注意的是
柯南团队终于创造了
多互动
柯南自定进度培训课程
这些课程完全免费
由jfrog在线提供
培训平台
被称为jfrog学院,所以如果你
我想去
更深入地学习,看到更多
练习
你可以访问下面的链接
academy.www.si-fil.com
做这些练习
在我的聊天中有一些很棒的问题
柯南团队的一些成员和我一起
在这里
他们会把所有这些都处理掉
如果有的话
我们可以要求更详细的回答
最后再讲这些,这样我们就可以保存了
q的最后一段时间
A所以柯南的高层次设计
是相当简单的
其他著名的包管理器
比如NPM pipi maven
Apt和yum具有共同的概念
比如本地存储库
用于本地柯南操作
并包操作和远程
用于共享包的存储库
具有易于使用的上传和下载
命令和功能
还有一个中心化的公众
存储库
对于开放源码包来说
被称为柯南中心
artifactory是一个服务器应用程序
jfrog提供
哪一个可以托管远程柯南存储库
这就是我们今天要做的
我们所有的练习,我在a中说过
集装箱码头工人
同样值得注意的是柯南中心只是一个
托管在artifactory上的Conan存储库
但它是托管在云端的
资源和2022世界杯阿根廷预选赛赛程CDN分配如此
柯南中心也是以同样的方式举办的
你可以拥有自己的私人网站
存储库
所以主持和主持
提供服务和所有费用
由jfrog维护
所以虽然柯南和其他人很相似
软件包管理器
以这些方式配合其高水平
体系结构
它的包装模式非常独特
这就是有趣的地方
这个框里显示的字符串
包裹
用户通道
这是我们称之为a的一个例子
柯南的食谱参考
这是最简单的
这里有简单的逻辑标识符

对于连接中的包,这是什么
它们看起来像
这是一个独特的地方
菜谱参考
与其他包管理器相比是
它可以表示
任意数量的独立物理二进制文件
具有独特的
构建配置,然后取一个
菜谱参考
你可以建立任意数量的物理
与…相关的二进制文件
存储在那个引用后面
包模型
其中一个标识符表示任意
唯一构建配置的数量
这是柯南的一大创新吗
这是柯南如何实现的
简单来说
柯南为每个人分配了一个唯一的id
独特的配置
这个唯一的id称为包id
柯南就用了这个
字符串中的各种东西
构建和打包过程
例如,包id用作
目录的基本部分
结构
用于将conan包存储在本地
缓存,它也是
在服务器实现上可见
它也用于许多其他事情
但这张图描述了如何
在构建中的差异是典型的
我们在构建中看到的差异
比如配置
如果你正在构建一个共享库
与静态库相比
其他设置都是一样的
你仍然会得到两个不同的二进制文件
所以我们还是得到了两个不同的
包id
这两个包裹的id被追踪到了
并分开存储和传输
这就是我们的理论
背后的根本创新
柯南的
所以客户端和服务器的包模型
也要使用包
时的匹配机制
上传和下载捐赠二进制文件
从远程存储库
所以在柯南的大多数操作中
你含蓄地或
显式指定构建
配置
获取适当的包id
每个包
并在一次操作中下载它们
此外,一旦您构建或下载了
特定二进制包
在您的本地机器上,二进制文件可以是
使用在
任何数量的项目在同一
具有相同配置的机器
所以有了柯南,就没必要重建了
相同的
库二进制文件多次使用
相同的配置
只是把它用在一些不同的
消费项目
对于像openssl这样的东西,你可以
只构建一次或一次
配置
你可以使用openssl二进制文件
任意数量的消费项目
所以这个缓存提供了一个非常有效的
二进制共享策略
就像我说的,柯南用的是建筑
配置作为的输入
计算这些包id
这里有两个关于柯南的深度例子
构建配置,我们通常
参考柯南的简介
这是基于文本的格式
同时将配置文件指定为命令行
参数
或者你可以把两者混合
因此用户可以将这些存储为文本文件
在这个格式中,然后传递
各种conan命令的文件名
这是一个更容易管理的
的方法来
进行比较时传递这些值
将这些值作为参数传递
个人观点
所以我们将使用这两个配置文件
在我们今天即将进行的练习中
我们想展示柯南的能力
跨平台的能力
所以我们要做所有我们
在Linux上做一次
然后有一次在Windows上
微软的编译器
关于配置文件的最后一个注意事项是
它们还允许你做其他事情
哪个是非常强大的
一定是你们认为的a
构建配置
这有点不同
配置文件允许您指定构建
工具
您希望在哪个方面提供服务
构建
因此,这是根据构建要求完成的
剖面剖面
就像这里用黄色标出的那样
我们指定要使用的示例
所有构建都使用3.19.0版本
在我们的图中,这需要c
这意味着有一个柯南
创建包含cmake的包
3.19.0
柯南会让cmake可执行
从那个包里
可通过路径环境获得
变量
在整个包构建过程中
因此,您可以使用build
需要
作为安装这些的替代方案
构建诸如cmake等工具
直接进入您的系统和用户
系统
所以对于分布非常分散的团队来说
对于那些
想要工具的一致性
自动构建服务器的数量和
像这样的东西
创建构建工具的conan包

通过conan构建使用它们需要
特性可以
提供很多优势,使之成为
更容易得到一致性和
保证
同时也推动了事情的发展
同一时间
所以关于建筑还有很多要说的
需要,但我们会用这个
在我们今天的练习中,我们将讨论
我们到了以后再多说一点
所以柯南的另一个主要创新
我们想提到的是什么
这是它的抽象层
提供超构建系统
在团队中开发应用程序时
这是典型的
一个典型的需求是
开发者应该能够
来构建整个应用程序
包括所有依赖项的源代码
比如图书馆和其他地方
一路上有很多CNC加库
和应用程序
有多个开源依赖项
不幸的是
开源CNC + +依赖关系
通常具有独特而复杂的构造
与之相关的系统和脚本
构建系统
所以学习所有这些都是一门专业
CNC的负担
再加上想要专注的开发者
关于代码
而不是在神秘的构建脚本和构建
系统
以及随之而来的所有复杂性

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

对大多数人来说,这是一项非同小可的努力
开发人员
我们来看看柯南是怎么做到的
过程更简单
我们要做的关键命令是
从这个练习中拿走
柯南认为这是根本吗
我们将要用到的特性
这是有关的文件
锻炼只是为了把所有的东西都放进去
开放的
我们有一个单一的源文件
正则表达式点CPP
其中包括boost正则表达式HPP
这就是源的依赖关系
水平
现在,在这种情况下,我们声明
需要升级版本1.74.0
我们正在使用c make build
系统,你可以在这里看到
在柯南文件文本框中,所以柯南
txt是我们指定东西的地方
与柯南有关
我们的依赖关系,在这里我们看到
做好包装
我们明确地说,我们
想要提供依赖于我们的
项目
以一种与cmake兼容的方式
查找包特性
在这里,我们看到cmake列表
文件,它告诉cmake如何构建我们的

我们可以看到我们确实在使用
让我们找到包
功能来定位boost和boost正则表达式
具体地说
使用所需关键字
这证明了我们注意到
首先这个
Cmakelist文件不包含任何内容
柯南特有的或专有的
这是一个普通的cmake列表文件
这表明任何存在的
使用find包创建项目
现在可以使用柯南的依赖关系了吗
不需要做任何事情
将cmakelist文件修改为
这样做
这是值得注意的,因为它没有
总是这样
cmake团队不得不非常努力地工作
在社区工作了几年
达到这种能力的完备性
透明度
使用cmake的查找包特性
这就是我要讲的命令
运行
这些命令同样可以在
幻灯片,一旦你有了幻灯片
你可以自己运行它们
执行命令还是柯南
安装
所以这里的connect install命令将
下载列出的所有依赖项
在我们刚刚展示的柯南文件中
它也会下载所有的
boost的传递依赖
Regex所以任何增强Regex需要
以及满足这些要求的任何东西
Require将全部下载
自动与柯南
下载后安装命令
柯南将生成的所有依赖项
一些文件
在即将到来的cmake构建中使用
其中一个文件是activate.sh
我们在下一个命令源中使用
你可以看到Activate.sh
这是第四行
还记得我们讨论过构建吗
需要在cmake中激活。sh
脚本
的cmake可执行文件
柯南包存在的地方
到我们现在的壳,它预写
从包中获取Bin目录
可执行文件是
到路径环境变量和
这就是我们如何利用cmake的
我们的柯南套餐
所以柯南会生成shell脚本
允许你使用其中的内容

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

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

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

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

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

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

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

您的组织可能有策略
针对预编译的二进制文件
等等,这样你就明白了
柯南安装
我们也希望你能理解
的力量
破折号的建造旗
现在我想谈谈
柯南的食谱
我想解释一下什么是食谱
然后展示一些例子
简单来说,柯南食谱就是
conan将要阅读的Python类
为了创造一个柯南而执行

显然,我们使用了一些柯南式的软件包
这就意味着有一些食谱
那些包裹在某个地方
写了
这样就解决了所有的困难
与构建系统的交互
让我们看看它是什么样子的
这里有一个柯南食谱的例子
正如我们所说,这是一个python类
它的特点是许多标准
方法名称
这些方法名称都对应于
传统步骤的过程
建造一个c
以项目为例
在需求方法中,我们声明
我们的项目依赖
这在美国可能不太常见
传统的构建过程
但是在导出源方法中
定义柯南需要哪些资源
捕获,为了做,为了建造
项目,也许你不需要
捕获自述文件
或者詹金斯的文件,或者
像这样的事你只需要
捕获c文件和头文件
这就是你所需要的
这就是出口资源的作用
现在在generate方法中,我们生成
构建系统的文件
它包含了我们需要的所有变量
如果你还记得我们生成了一堆
找到的
包制作脚本,将采取
放置在生成方法中
继续我们的构建方法
调用构建系统
你知道我们是打还是打
Ms build或
调用make以构建源
转换成我们想要的二进制文件
最后在包方法中我们
捕获已构建的二进制文件
我们把它们复制到一个包裹里
目录,包括
共享库静态库头
文件,所有生产出来的东西
我们需要传送到我们的
消费者
那么我想我应该说终于来了
包信息方法
我们声明包裹的内容
目录
我们刚刚捕获并填充了它
消费者
举个例子,如果我们捕获一些
静态库中的包信息方法
将列出
这些静态变量的名称是什么
图书馆,所以对于
链接者的消费者又怎样
目录名称是否存在
子目录
我们可以在哪里找到这些图书馆
链接到我们
它定义了头文件的目录
还有其他变量,比如see
预处理器指令之类的
像这样的环境变量可以
这里定义
还是package info方法
描述了
所需的包的内容
消费者
柯南会调用这些方法
以适当的顺序
在运行创建过程时
这是另一个食谱的例子
这个实际上有这些方法
定义
这样就不那么抽象了

我们化简了一下
注意打包的项目
这个食谱是一个cmake项目
所以它利用了几个因素
特定的助手类
柯南团队提供的,这使得
食谱更容易读,而且

我们将展示另一种选择
下一个
首先在需求方法中
我们声明依赖关系
语法是这样的
为此,你调用self。requires
列出你的依赖关系
接下来在电竞源方法上吧
声明在这种情况下我们将
捕获工作中的所有文件
目录
作为构建的潜在来源
说你可以过滤掉那些
不重要
但这颗恒星很容易被证明
接下来,生成方法使用两个帮助器

从哪里产生。c生成文件
柯南变量
这包括所有的信息
即将到来的构建需要什么
正如我们所说,它创造了发现
boost.cmake
它还创建了一个工具链文件
是否有其他变量相关
你传递给柯南的设置
侧写,我们就不细说了
关于那些但是
这是它产生这些的地方
文件
在构建步骤中,我们将使用
这些文件
因此,构建方法使用另一个帮助器
叫做cmake
助手类,就叫cmake
当我们运行的时候
cmake。配置和cmake。构建方法
在柯南食谱中,柯南将调用
在架子上为我们准备了可执行文件
这些帮手只是让事情变得简单了很多
要获得正确的命令行语法,请执行
空格和引号
避免常见错误,但是你可以
self。run和
原始地编写命令行字符串
就像你想要的那样
不要用帮手,等着瞧吧
在下一张幻灯片中
但最终它翻译了所有
参数正确,它得到
使用助手是有帮助的
特别是在lee和cmix的案例中
最后,包方法也使用
cmake助手
来做安装方法和这个
实际运行cmake安装目标
所以有很多
项目定义了所谓的安装
Target定义了运行的类型
时间
生成工件的布局
应该去
柯南让我们利用了这一点
目标
通过这样做给这个cmake安装
函数
在这里的笔记中,在蓝绿色的你
可以看到
它设置了cmake安装前缀
变量中相应的目录
柯南缓存
为了利用它,这是一个非常简洁的
这个技巧很有用
最后,正如我所说,我们需要的包信息
来声明文件的存放位置
包文件夹
我们放了什么文件,所以我们有
包括目录
我们把它列为
包括错误,这将被翻译

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

文本文件或点生成文件
你不知道是制造还是制造
导数
同样,编写自定义也很简单
发电机,或者你可以
把函数写在这里
我们传递信息
生成函数中的变量
你可以把它们转换成
文本文件,您可以将它们写入
所以磁盘的目的就是这样
生成命令
我们没有展示一个完整的发电机,但是
我们确实表明你需要一个
然后在构建方法中,您将需要
调用自定义构建系统
以及其他cli应用程序
你可能想要参选
许多构建方法不仅仅是
简单的命令
它们有10到30个指令
演奏和编排一种习惯
构建系统
但你可以随心所欲
构建系统都在
构建
方法,您将拥有python的所有功能
随你处置,还有很多帮手
来自柯南的方法
用于运行和读取文件和
写文件
非常灵活的方法
中定义构建过程
如果我们没有
像cmake提供的那样安装目标
我们需要声明并指定是什么

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

一个通用的结构,这就是我们
在这里做
但实际上并不是这样
不管我们想要什么样的文件夹结构
使用
来存储这些文件,因为我们可以
描述它
然而,在包信息方法中,我们
在这种情况下,我们希望如此
模拟了cmake的安装也刚刚
使用相同的结构
头文件进入了一个include
目录lib目录
所有的库都放到lib目录中
还有libs
被命名为一个单一的图书馆和
它被命名为我的lib,但我们可以
定义任何我们想要的文件夹结构
在封装方法中
只要我们恰当地描述它
这里在package info方法中
这可能是抽象的,它需要
一些练习
一旦你在写食谱,看看如何
这是可行的
希望现在你们能理解了
这是一个过程
这个食谱是按照什么顺序做的
最终的最终的方式
柯南捕获文物并提供
他们
消费者,好吧
很多关于柯南的食谱,但它是
你知道柯南最基本的部分
所以我们真的希望人们能理解
当他们在柯南中心找
比如他们所看到的
当他们看到的时候给他们一些背景
这些食谱理解是什么
发生
现在我们要创建一个
柯南包,值得注意的是
与前面的示例相同的项目
我们要替换conan file.txt
用conan file.py
我们要定义所有的
柯南要求的方法
点乘py,我们就会得到a
这个配方的包装
我们要去掉的关键命令
这是柯南,这是柯南
创建一个包
作为提醒,我们的源文件被命名为
regex.cpp
这取决于我们所说的boost regex
硬币和file。py会显示这一点
下一个
但我们只是想展示清单
和我们做的一样吗
我们在第一个练习中使用的,这里是
我们的
真正的柯南食谱,我们要
使用
你可以看到,当你
以前的都是一般情况
展示了我们需要的所有方法
当我们有一个真正简单的包装
食谱变得更简单了
更容易的是,我们只是
使用这些方法中的四种
这个只需要四个

我们给它起了个恰当的名字
会被命名为regex 0.1.0吗
我们不打算讨论
设置线今天,但这简单
定义了一些事情
进入包id计算
最后我们说我们想
生成cmakefind包生成器
和我们一样的虚拟环境文件
做了
在消费运动中,我们是
这里说我们需要它
构建方法
好吧
如前所述,我们将使用
柯南创建命令,这将
使用我们的配方来构建我们的包和
从它创建包
在我们创建我们想要的包之后
某种方法来证明它是有效的
老实说,这个练习有点
如果我们只会跑,那就太无聊了
柯南创建命令是单个的
命令不是我们真正想要的
显示
这不足以证明我应该这么做
在我们跑完之后
柯南创建这些命令的其余部分

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

还是在examples目录下
这是创建包的例子
我们将奔跑
柯南像我们以前一样创建命令
对不起,就像我们在经过之前一样
和我们以前一样
使用
然后这个就会
按照食谱上说的做吗
收集它将下载的源文件
需求
它会运行构建,然后
打包构建的结果
然后放到本地缓存中
我们在这里看到,希望你们能看到
这个命令被执行了
这是cmake日志
然后在这里,最后我们
看到
包创建,我们打包了一个文件
Regex exe下划线exe
我们现在要运行
可执行文件,确保
它做我们期望它做的事
所以我们运行柯南安装,现在我们给出
参考是因为
在这个日志中,它打印出完整的
参考
这样创建的包的名称
它结合了名称和版本
还有我们传递的两个参数
命令行
Demo斜杠Demo现在当我们运行
安装
我们传递相同的引用,所以我们
说我们想安装它
使用虚拟运行嫉妒生成器
到当前目录中,我们将
试试
我们可以在这里看到
生成虚拟
环境脚本,如果我
激活
我输入哪个
我应该注意
我只需要用
该命令
如果我做哪个regex exe
就像我们做的cmake的例子一样
在我们找到它之前
可执行的
在柯南缓存里
这样我们就不用通过了
整个路径
好了,我们传递了字符串和
我们得到了
这是意料之中的结果,太棒了
我们会再次关闭它
环境
然后放回CD
好了,我现在看下一张幻灯片
我们将再次为Windows做同样的事情
的再次部分
这个演示是为了展示比较的复杂性
的跨平台特性和力量
柯南
工作流程是多么的相似
在Windows, Linux和MAC OS上
还是一样的,我们只有绿色
我们有不同的亮点
不同的配置文件不同
文件夹
语义和语法略有不同
打电话给
二进制,但或多或少
过程在精神上是一样的
让我们快速地做一下
离开
Linux shell,现在进入Windows
壳牌再次
记住正确的命令
我们现在在Windows下
conan命令和conan命令是一样的
Create命令在
Windows和Linux,这部分很好
我们会讲得很快,因为最后我们
真的很想展示
最后一件事我们谈过的事
在很早的时候
这就是二进制的共存方式吗
一边
在单个包引用下
好的,如果我们往下看,我们做到了
包已创建
我们用这个打包了一个exe文件
文件名称
所以它调用了,make everything 's
相同
它打包了一个exe文件,现在我们
想用它吗?
我很快地查一下聊天记录
有什么
我错过的重要的东西
(音乐)
我确实看到了,是的,值得注意的是
有一个
实际上有不止一个虚拟
环境生成器和我们都用过
第二,它们略有不同
我确实轻而易举地解决了这个问题
很高兴看到有人问了这个问题
在聊天中被称呼
我们想在
运行Windows目录
要做到这一点,我们只需要产生
激活运行脚本
我们这样做也是值得注意的
我们跑完之后
激活脚本时,它总是放一个

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

对应于我的docker容器
集装箱码头工人
如果您在本地运行它应该是相同的
具有相同端口的Url
假设你没有改变任何东西
在你启动之前
好吧,让我们运行一次柯南远程列表
更多的
我们能做到吗
Artifactory在这里列在第二位
现在我们可以指定一个用户和一个
人工密码
Admin和password为默认值
人工证书
现在我们应该试着上传,柯南
上传我们的regex包
生成并上传所有二进制文件
这里我们看到上传regex
它已经上传了正则表达式的引用
0.1.0 at demo demo和一个二进制文件
来自Linux的一个二进制包

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

抱歉,我们要去洗个干净
从这里开始
好了,我们的目标
是在传统上上传吗
环境,如果你有多个
您拥有的ci与构建的平台
机器建立在不同的
平台
您最终将上传相同的内容
包,但不同的二进制文件从许多
与您的构建不同的机器
基础设施,所以我们
在这里模拟一下
再加上artifactory
我将提供一次证书
再一次。
然后我们将上传正则表达式

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

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

这这些抽象最后让我们
演示了人工智能是如何提供的
柯南存储库的免费本地托管
建立一个是多么快速和容易
实例并开始将包上传到

当我们开始的时候,我真的没有
人工安装
我开始在一个容器里制作艺术品
使用docker命令
我马上就能开始了
上传和下载到它
这对你和你的
开发团队也是如此
这就是我所有的练习
今天很遗憾,因为有
这么多不同的特征,我们
甚至都没机会展示
话虽如此,以下是一些地方
你可以去了解更多
特性
在柯南。IO的主页上你可以
找到链接
到以下每个资源2022世界杯阿根廷预选赛赛程
有自己的价值吗
这取决于你的环境
你的兴趣和需求,我们希望你能
发现他们很有帮助
如果你想和我聊天的话
柯南团队
或者其他柯南的用户你可以找到我们所有人
在松弛
在CPP语言社区有一个
通道
献给柯南标签柯南
你可以在那里报名,然后问问
有问题吗?
如果需要的话,给我们任何一个人留言
最后,我非常感谢
感谢阿迪和在座各位的出席
谢谢你让我们来展示,我希望
会议很愉快,而且
信息丰富的
我希望你能下载并运行

为你自己在当地和
我很想听听谁的意见
任何麻烦
或成功,如果在任何情况下,如果你觉得
可以在推特或
领英让我们知道你的想法
但现在我很乐意接受
有任何问题和评论
根本就没有反馈