创建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.mzph.cn/news/197656.shtml

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

相关文章

智能优化算法应用:基于适应度相关算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于适应度相关算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于适应度相关算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.适应度相关算法4.实验参数设定5.算法结果…

vue3 vue-router的安装及配置 (一)

文章目录 一、安装二、Vue Router配置2.1 vue-router两种引入方式的区别2.2 不同的历史模式 三、router-link四、router-view Vue Router作用:在应用程序中实现优雅的导航和路由管理。 一、安装 注意:vue3安装的是vue-router4,vue2安装的是vue-router3…

大学里面转专业介绍

目录 个人情况转专业过程中的经验分享转专业后的学习建议和心态调整转专业后的时间平衡 个人情况 信息科学与工程学院计算机科学与技术专业2019级本科生,曾从物理与微电子科学学院后转入信息科学与技术学院。学习成绩连续三年专业前10% 项目:爬虫项目、…

python-单词本|通讯录

编写程序,生词本。 def sayHello():print("" * 20 \n 欢迎使用生词本\n 1.查看生词本\n 2.背单词\n 3.添加新单词\n 4.删除单词\n 5.清空生词本\n 6.退出生词本\n * 20 \n)def addW(data):word input("请输入新单词:")trans i…

ai学习之快捷键介绍

ai2021学习之快捷键介绍 F 全屏Ctr Y ,可以在去色和全色中切换。Shift O 画板工具CtrlALTY 将矢量图转为位图。Ctrl R 可以显示标尺, CTRL冒号(:;) 隐藏参考线智能参考线CTRLshirtz 撤回撤回的撤回 Ai是一个…

python flask Jinja2模板学习

分类很好的一篇文章 Jinja2模板语法 Jinja2里常见的三种定界符: (1) 语句 {% ... %}(2) 表达式 {{ ... }}(3) 注释 {# ... #} {%set adazhaung%} 语句设置变量{{a}} 表达式{% if 2>1 %}控制语句以{%endif%}结尾 Jinja2支持使用“.”获取变量的属…

Python小案例:99乘法表打印

99乘法表的打印 分析: 1、需要利用两次循环进行控制循环次数 2、通过print参数进行控制打印样式 代码部分 # 外循环实现层级 for i in range(1,10):# 内循环控制计算for j in range(1,i1):# 利用print函数结尾end参数控制打印print(f"{j}*{i}{j*i}",e…

FPGA时序分析与时序约束(一)

一、为什么要进行时序分析和时序约束 PCB通过导线将具有相关电气特性的信号相连接,这些电气信号在PCB上进行走线传输时会产生一定的传播延时。 而FPGA内部也有着非常丰富的可配置的布线资源,能够让位于不同位置的逻辑资源块、时钟处理单元、BLOCK RAM、D…

【未解决】huggingface模型文件下载地址为什么会变?

问题描述 上次我们已经分析了huggingface加载模型时候的文件目录应该是怎么样的?(感兴趣的可以主页搜索“【经验分享】huggingface模型加载过程下载到cache文件目录具体是怎么组织的?以及都会有什么文件目录,每个文件目录是什么&a…

翻译: 生成式人工智能的工作原理How Generative AI works

ChatGPT 和 Bard 等系统生成文本的能力几乎像魔法一样。它们确实代表了 AI 技术的一大步进。但是文本生成到底是如何工作的呢?在这个视频中,我们将看看生成式 AI 技术的底层原理,这将帮助你理解你可以如何使用它,以及何时可能不想…

【开源】基于JAVA的考研专业课程管理系统

项目编号: S 035 ,文末获取源码。 \color{red}{项目编号:S035,文末获取源码。} 项目编号:S035,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高…

免费的SEO外链发布工具,提升排名的利器

互联网已经成为信息传播和商业发展的重要平台。而对于拥有网站的个人、企业来说,如何让自己的网站在搜索引擎中脱颖而出?SEO(Search Engine Optimization)作为提高网站在搜索引擎中排名的关键手段. 什么是SEO外链? S…

【STM32入门】3.OLED屏幕

1.OLED引脚 OLED屏幕的接线按图所示,本例中用的是4管脚OLED屏幕 2.驱动程序 配套的驱动程序是“OLED.c",主要由以下函数构成:1、初始化;2、清屏;3、显示字符;4、显示字符串;5、显示数字…

使用激光雷达(LiDAR)和相机进行3D物体跟踪

使用相机和激光雷达进行时间到碰撞(TTC)计算 在我的先前文章中,我介绍了通过检测关键点和匹配描述符进行2D特征跟踪的主题。在本文中,我将利用这些文章中的概念,以及更多的内容,开发一个软件流水线&#xf…

STM32串口通信初探:使用HAL库实现基本功能

在本文中,我们将探索如何使用STM32的HAL库来实现串口通信的基本功能。串口通信是一种常见的外设通信方式,用于在微控制器和其他外部设备之间进行数据传输。在STM32系列微控制器中,HAL库提供了简单且灵活的方法来实现串口通信。我们将重点讨论…

深入理解强化学习——马尔可夫决策过程:蒙特卡洛方法-[代码实现]

分类目录:《深入理解强化学习》总目录 在文章《深入理解强化学习——马尔可夫决策过程:蒙特卡洛方法-[基础知识]》中我们介绍了利用蒙特卡洛方法计算马尔可夫决策过程价值的方法,本文将用代码定义一个采样函数。采样函数需要遵守状态转移矩阵…

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

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

【Java 基础】19 多线程基础

文章目录 进程和线程进程&#xff08;Process&#xff09;线程&#xff08;Thread&#xff09; 线程的创建1&#xff09;继承 Thread 类2&#xff09;实现 Runnable 接口3&#xff09;使用 Lambda 表达式4&#xff09;总结 线程的状态状态的分类状态间转换 多线程是一种 同时执…

6、原型模式(Prototype Pattern,不常用)

原型模式指通过调用原型实例的Clone方法或其他手段来创建对象。 原型模式属于创建型设计模式&#xff0c;它以当前对象为原型&#xff08;蓝本&#xff09;来创建另一个新的对象&#xff0c;而无须知道创建的细节。原型模式在Java中通常使用Clone技术实现&#xff0c;在JavaSc…

SpringBoot系列之集成Jedis教程

SpringBoot系列之集成Jedis教程&#xff0c;Jedis是老牌的redis客户端框架&#xff0c;提供了比较齐全的redis使用命令&#xff0c;是一款开源的Java 客户端框架&#xff0c;本文使用Jedis3.1.0加上Springboot2.0&#xff0c;配合spring-boot-starter-data-redis使用&#xff0…