创建conan包-Understanding Packaging

创建conan包-Understanding Packaging

  • 1 Understanding Packaging
    • 1.1 Creating and Testing Packages Manually
    • 1.2 Package Creation Process

本文是基于对conan官方文档Understanding Packaging翻译而来, 更详细的信息可以去查阅conan官方文档。

1 Understanding Packaging

1.1 Creating and Testing Packages Manually

The previous create approach using test_package subfolder, is not strictly necessary, though very strongly recommended. If we didn’t want to use the test_package functionality, we could just write our recipe ourselves or use the conan new command without the -t. command line argument.
之前使用 test_package 子文件夹的创建方法并非绝对必要,但强烈建议使用。如果不想使用 test_package 功能,我们可以自己编写配方,或者使用不带 -t. 命令行参数的 conan new 命令。

$ mkdir mypkg && cd mypkg
$ conan new hello/0.1

This will create just the conanfile.py recipe file. Now we can create our package:
这将只创建 conanfile.py 配方文件。现在我们可以创建软件包了:

$ conan create . demo/testing

This is equivalent to:
这相当于:

$ conan export . demo/testing
$ conan install hello/0.1@demo/testing --build=hello

Once the package is created, it can be consumed like any other package, by adding hello/0.1@demo/testing to a project conanfile.txt or conanfile.py requirements and running:
创建软件包后,可以像使用其他软件包一样,在项目 conanfile.txtconanfile.py 要求中添加 "hello/0.1@demo/testing "并运行:

$ conan install .
# build and run your project to ensure the package works

1.2 Package Creation Process

It is very useful for package creators and Conan users in general to understand the flow for creating a package inside the conan local cache, and all about its layout.
对于软件包创建者和一般conan用户来说,了解在conan本地缓存中创建软件包的流程及其布局非常有用。

Each package recipe contains five important folders in the local cache:
每个软件包配方都包含本地缓存中的五个重要文件夹:

  • export: The folder in which the package recipe is stored.
  • export:存储软件包配方的文件夹。
  • export_source: The folder in which code copied with the recipe exports_sources attribute is stored.
  • export_source:存储使用 exports_sources 属性复制的代码的文件夹。
  • source: The folder in which the source code for building from sources is stored.
  • source: 源代码存储从源代码构建源代码的文件夹。
  • build: The folder in which the actual compilation of sources is done. There will typically be one subfolder for each different binary configuration
  • build:实际编译源代码的文件夹。通常每个不同的二进制配置都有一个子文件夹
  • package: The folder in which the final package artifacts are stored. There will be one subfolder for each different binary configuration
  • package:存储最终软件包工件的文件夹。每个不同的二进制配置将有一个子文件夹

The source and build folders only exist when the packages have been built from sources.
源文件夹和构建文件夹只有在软件包从源文件夹构建时才会存在。
在这里插入图片描述
The process starts when a package is “exported”, via the conan export command or more typically, with the conan create command. The conanfile.py and files specified by the exports_sources field are copied from the user space to the local cache.
当通过 conan export 命令或更常见的 conan create 命令 "导出 "软件包时,该过程就开始了。conanfile.py 和 exports_sources 字段指定的文件会从用户空间复制到本地缓存。

The export and export_source files are copied to the source folder, and then the source() method is executed (if it exists). Note that there is only one source folder for all the binary packages. If when generating the code, there is source code that varies for the different configurations, it cannot be generated using the source() method, but rather needs to be generated using the build() method.
导出和 export_source 文件会被复制到源文件夹,然后执行 source() 方法(如果存在)。请注意,所有二进制软件包都只有一个源代码文件夹。如果在生成代码时,不同配置有不同的源代码,则不能使用 source() 方法生成,而需要使用 build() 方法生成。

Then, for each different configuration of settings and options, a package ID will be computed in the form of a SHA-1 hash for this configuration. Sources will be copied to the build/hashXXX folder, and the build() method will be triggered.
然后,针对每个不同的设置和选项配置,以 SHA-1 哈希形式计算出该配置的软件包 ID。源代码将被复制到 build/hashXXX 文件夹,并触发 build() 方法。

After that, the package() method will be called to copy artifacts from the build/hashXXX folder to the package/hashXXX folder.
之后,将调用 package() 方法将build/hashXXX 文件夹中的工件复制到 package/hashXXX 文件夹中。

Finally, the package_info() methods of all dependencies will be called and gathered so you can generate files for the consumer build system, as the conanbuildinfo.cmake for the cmake generator. Also the imports feature will copy artifacts from the local cache into user space if specified.
最后,所有依赖项的 package_info() 方法都会被调用和收集,这样你就可以为用户编译系统生成文件,就像为 cmake 生成器生成 conanbuildinfo.cmake 文件一样。如果指定了导入功能,它还会将本地缓存中的工件复制到用户空间。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker Image(镜像)——5

目录: Docker 镜像是什么镜像生活案例镜像分层生活案例为什么需要镜像镜像命令详解 镜像命令清单docker imagesdocker tagdocker pulldocker pushdocker rmidocker savedocker loaddocker historydocker importdocker image prunedocker build镜像操作案例 查找镜像…

微信小程序 老年人心血管健康知识科普系统

本系统的功能有管理员:个人中心,用户管理,热点信息管理,疾病管理,疾病类型管理,治疗管理,治疗类型管理,护理管理,护理类型管理,科普管理,科普类型…

HTTP 缓存机制

一、强制缓存 只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存而无需再请求服务器。 强制缓存是利用下面这两个 HTTP 响应头部(Response Header)字段实现的,它们都用来表示资源在客户端缓存的有效期: Cache…

力扣572:另一棵树的子树

力扣572:另一棵树的子树 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所…

nodejs微信小程序+python+PHP就业求职招聘信息平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

导入JDBC元数据到Apache Atlas

前言 前期实现了导入MySQL元数据到Apache Atlas, 由于是初步版本,且功能参照Atlas Hive Hook,实现的不够完美 本期对功能进行改进,实现了导入多种关系型数据库元数据到Apache Atlas 数据库schema与catalog 按照SQL标准的解释,…

全文检索[ES系列] - 第495篇

历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…

java设计模式学习之【建造者模式】

文章目录 引言建造者模式简介定义与用途实现方式: 使用场景优势与劣势建造者模式在spring中的应用CD(光盘)的模拟示例UML 订单系统的模拟示例UML 代码地址 引言 建造者模式在创建复杂对象时展现出其强大的能力,特别是当这些对象需…

linux 应用开发笔记---【标准I/O库/文件属性及目录】

一,什么是标准I/O库 标准c库当中用于文件I/O操作相关的一套库函数,实用标准I/O需要包含头文件 二,文件I/O和标准I/O之间的区别 1.标准I/O是库函数,而文件I/O是系统调用 2.标准I/O是对文件I/O的封装 3.标准I/O相对于文件I/O具有更…

为什么 SQL 不适合图数据库

背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言?” 过去,我们的一些客户经常问这个问题,但随着时间的推移,这个问题变得越来越少。 尽管一度被忽视,但图数据库拥有无缝设计并适应其底层数据结构的查询…

SpringBoot启动流程

SpringBoot启动流程 文章目录 SpringBoot启动流程SpringBoot启动流程 SpringBoot启动流程 视频链接: https://www.bilibili.com/video/BV15b4y1a7yG/?p174&spm_id_frompageDriver&vd_sourcef6debc5a79e3f424f9dde2f13891b158 看李老师讲的吧,特…

WPF实战项目十九(客户端):修改RestSharp的引用

修改HttpRestClient,更新RestSharp到110.2.0,因为106版本和110版本的代码不一样,所以需要修改下代码 using Newtonsoft.Json; using RestSharp; using System; using System.Threading.Tasks; using WPFProjectShared;namespace WPFProject.S…

【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】

这里写自定义目录标题 一、什么是STL二、STL的版本1. 原始版本2. P. J. 版本3. RW版本★ 4. SGI版本 三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷 一、什么是STL STL ( standard template libaray - 标准模板库 ):是C标准库 的重要组成部分&…

使用栈解决括号匹配问题(详解)

项目结构 项目头文件的代码或截图 头文件代码 #ifndef LINKSTACK_H #define LINKSTACK_H #include <stdio.h> #include <stdlib.h> // 链式栈的节点 typedef struct LINKNODE {struct LINKNODE* next; }LinkNode; // 链式栈 typedef struct LINKSTACK {LinkNode h…

VUE项目启动报错: ERROR Error: error:0308010C:digital envelope routines::unsupported

1.vue项目启动报错&#xff1a; 是因为新版本node造成的 方法&#xff1a;修改 packge.json文件 修改为下图&#xff1a; 添加了如下代码 SET NODE_OPTIONS--openssl-legacy-provider && 就可以正常启动了

element-ui upload组件中将file文件数据转成二进制流数据格式

方法一 handleBeforeUpload (file)const reader new FileReader()reader.readAsArrayBuffer(file)reader.onload async function (theFile) {const binary new Blob([theFile.target.result]) // 转成二进制流数据 即binary数据格式}}方法二 const aBlob new Blob([file],…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C 需要环境或者解析可以私信 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&…

使用Java语言判断一个数据类型是奇数还是偶数

判断一个数字类型是奇数&#xff0c;还是偶数&#xff0c;只需要引入Scanner类&#xff0c;然后按照数据类型的定义方式进行定义&#xff0c;比较是按照与2进行整除后的结果&#xff1b;如果余数为零&#xff0c;则代表为偶数&#xff0c;否则为奇数。 import java.util.Scann…

ES6 import

这里 import 的文件是项目内自己 export 的对象&#xff0c;并非 package.json 里引用的包。 后者的打包策略和配置有关。 原理&#xff1a;彻底理解JavaScript ES6中的import和export - 知乎

Ruby和HTTParty库下载代码示例

ruby require httparty require nokogiri # 设置服务器 proxy_host "" proxy_port "" # 定义URL url "" # 创建HTTParty对象&#xff0c;并设置服务器 httparty HTTParty.new( :proxy > "#{proxy_host}:#{proxy_port}" ) …