conan入门(三):上传预编译的库(artifact)

2023-10-07 23:20

本文主要是介绍conan入门(三):上传预编译的库(artifact),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

conan 上传预编译的库(artifact)

我们经常需要从现有二进制文件创建包,比如第三方或供应商提供的C/C++库(只有include和lib),或在引入conan管理包之前手工编译编译好C/C++库。在这种情况下,我们并不需要conan从源代码编译,费时费事或根本不可能。所以以下情况我们可以考虑直接将本地已经编译好的二进制文件生成conan包:

  • 当您无法从源代码构建包时(当只有预编译的库可用时)。
  • 在工件(artifact)开发阶段需要频繁打包提供另外的应用程序使用时。这时我只需要将编译好的工件快速提供给使用方而不需要重新编译,因此您不想调用 conan create。如果您使用 IDE 或在本地调用 conan build命令,此方法将保留您的构建缓存。

本文在cJSON为例,说明如何上传预编译的二进制库(artifact)

cjson.build是我之前用于编译cJSON而写的脚本,可以使用armcc,gcc,MSVC编统linux-arm,linux-armhf,linux-x86_64,windows-x86_64平台的库。

现在我打算用conan来做包管理,对于我来说,将这些已经预编译好的库上传到conan私有制品库,是最省事的办法 。

所以我参照conan的官方文档《Packaging Existing Binaries》来实现arm平台预编译库上传到私有制品库

你可以用cjson.build编译出自己当前平台的库,然后参照本文来做测试。

conan new

使用conan new命令创建基本配置:

$ cd cjson.build/release/
$ conan new cjson/1.7.15 --bare
File saved: conanfile.py

–bare -b 创建不需要编译的配置文件

conan new会在当前文件夹下生成conanfile.py,我修改了其中的description,url,license,author,topics改为有意义的值

from conans import ConanFile, toolsclass CjsonConan(ConanFile):name = "cjson"version = "1.7.15"settings = "os", "compiler", "build_type", "arch"description = "Ultralightweight JSON parser in ANSI C."url = "https://github.com/DaveGamble/cJSON"license = "https://github.com/DaveGamble/cJSON/blob/master/LICENSE"author = "DaveGamble"topics = "json"def package(self):self.copy("*")def package_info(self):self.cpp_info.libs = tools.collect_libs(self)def configure(self):del self.settings.compiler.libcxx

因为cJSON是个纯C的库,所以需要添加最后两行代码,conan export-pkg否则会报错:

ERROR: cjson/1.7.15: ‘settings.compiler.libcxx’ value not defined

参见《ERROR: Invalid setting》https://docs.conan.io/en/latest/faq/troubleshooting.html#error-setting-value-not-defined

conan export-pkg

conan export-pkg命令将release/cJSON_arm-linux-gnueabihf(适用于linux-armhf平台的库)下生成的arm平台库打包保存到本地仓库($HOME/.conan/data)

$ cd cjson.build/release/
$ conan export-pkg -pf cJSON_arm-linux-gnueabihf conanfile.py  -s os=Linux -s compiler=gcc -s compiler.version=4.8 -s arch=armv7 --force
Exporting package recipe
cjson/1.7.15@cjson/1.7.15: A new conanfile.py version was exported
cjson/1.7.15@cjson/1.7.15: Folder: C:\Users\guyadong\.conan\data\cjson\1.7.15\cjson\1.7.15\export
cjson/1.7.15@cjson/1.7.15: Exported revision: a7a0296958b0d29e5e4f34434b1808cd
cjson/1.7.15@cjson/1.7.15: Forced build from source
Packaging to 755fc07adbed235a7d3eadec4b6882d4912f09bc
cjson/1.7.15@cjson/1.7.15: Exporting to cache existing package from user folder
cjson/1.7.15@cjson/1.7.15: Package folder C:\Users\guyadong\.conan\data\cjson\1.7.15\cjson\1.7.15\package\755fc07adbed235a7d3eadec4b6882d4912f09bc
cjson/1.7.15@cjson/1.7.15: Packaged 1 '.h' file: cJSON.h
cjson/1.7.15@cjson/1.7.15: Packaged 1 '.a' file: libcjson.a
cjson/1.7.15@cjson/1.7.15: Packaged 4 '.cmake' files: cjson-release.cmake, cjson.cmake, cJSONConfig.cmake, cJSONConfigVersion.cmake
cjson/1.7.15@cjson/1.7.15: Packaged 1 '.pc' file: libcjson.pc
cjson/1.7.15@cjson/1.7.15: Package '755fc07adbed235a7d3eadec4b6882d4912f09bc' created
cjson/1.7.15@cjson/1.7.15: Created package revision 86d7c021c2a785a1b8ea1fd00af1893c

-pf --package-folder 指定要打包的文件夹

-f --force 强制上传,如果指定参数,会强制覆盖原来存在的包。未指定的,如果本地仓库已经存在同名名则报错退出。

os,compiler,compiler.version,arch参数用于指定该包的交叉编译环境,如果未指定这些参数,则从$HOME/.conan/profiles/default读取默认值

这些字段不是随便填的,每个字段都一个可选值列表:

  • os:
    [‘AIX’, ‘Android’, ‘Arduino’, ‘Emscripten’, ‘FreeBSD’, ‘Linux’, ‘Macos’, ‘Neutrino’, ‘SunOS’, ‘VxWorks’, ‘Windows’, ‘WindowsCE’, ‘WindowsStore’, ‘baremetal’, ‘iOS’, ‘tvOS’, ‘watchOS’]
  • compiler:
    Possible values are [‘Visual Studio’, ‘apple-clang’, ‘clang’, ‘gcc’, ‘intel’, ‘intel-cc’, ‘mcst-lcc’, ‘msvc’, ‘qcc’, ‘sun-cc’]
  • arch:
    Possible values are [‘x86’, ‘x86_64’, ‘ppc32be’, ‘ppc32’, ‘ppc64le’, ‘ppc64’, ‘armv4’, ‘armv4i’, ‘armv5el’, ‘armv5hf’, ‘armv6’, ‘armv7’, ‘armv7hf’, ‘armv7s’, ‘armv7k’, ‘armv8’, ‘armv8_32’, ‘armv8.3’, ‘sparc’, ‘sparcv9’, ‘mips’, ‘mips64’, ‘avr’, ‘s390’, ‘s390x’, ‘asm.js’, ‘wasm’, ‘sh4le’, ‘e2k-v2’, ‘e2k-v3’, ‘e2k-v4’, ‘e2k-v5’, ‘e2k-v6’, ‘e2k-v7’, ‘xtensalx6’, ‘xtensalx106’]
    如果要获取准确的所有字段的可用值列表,参见$HOME/.conan/settings.yml,其中包含conan配置文件中 settings允许值的默认定义
    关于$HOME/.conan/settings.yml参见 https://docs.conan.io/en/latest/extending/custom_settings.html#custom-settings

conan upload

执行conan upload完成cjson/1.7.15包上传私有制品库

$ conan upload cjson/1.7.15 -r=privrepo --all
Are you sure you want to upload 'cjson/1.7.15' to 'facelib'? (yes/no): yes
Uploading to remote 'privrepo':
Uploading cjson/1.7.15 to remote 'privrepo'
Uploading conanfile.py -> cjson/1.7.15
Uploading conanmanifest.txt -> cjson/1.7.15
Uploaded conan recipe 'cjson/1.7.15' to 'privrepo': http://127.0.0.1:8082/artifactory/api/conan/stable
Uploading package 1/1: 51dcb8c35db66a86148c7ec8052bb9971de45522 to 'privrepo'
Compressing package...
Uploading conan_package.tgz -> cjson/1.7.15:51dc
Uploading conaninfo.txt -> cjson/1.7.15:51dc
Uploading conanmanifest.txt -> cjson/1.7.15:51dc

-r 指定要上传的制品仓库名

–all 上传所有文件(package recipe and package)

登录入JFrog Artifactory可以看到刚才上传的包

在这里插入图片描述

conan系列文章

《conan入门(一):conan 及 JFrog Artifactory 安装》
《conan入门(二):conan 服务配置-密码管理及策略》
《conan入门(三):上传预编译的库(artifact)》
《conan入门(四):conan 引用第三方库示例》
《conan入门(五):conan 交叉编译引用第三方库示例》
《conan入门(六):conanfile.txt conanfile.py的区别》
《conan入门(七):将自己的项目生成conan包》
《conan入门(八):交叉编译自己的conan包项目》
《conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义》
《conan入门(十):Windows下Android NDK交叉编译Boost》
《conan入门(十一):Linux下Android NDK交叉编译Boost》
《conan入门(十二):Windows NDK 编译 boost报错:CMake was unable to find a build program … MinGW Makefile》
《conan入门(十三):conan info 命令的基本用法》
《conan入门(十四):conan new 命令的新特性–模板功能(–template)》
《conan入门(十五):AttributeError: ‘CMake‘ object has no attribute ‘definitions‘》
《conan入门(十六):profile template功能实现不同平台下profile的统一》
《conan入门(十七):支持android NDK (armv7,armv8,x86,x86_64)交叉编译的统一profile jinja2模板》
《conan入门(十八):Cannot recognize the Windows subsystem, install MSYS2/cygwin or specify a build_require》
《conan入门(十九):封装第三方开源库cpp_redis示例》
《conan入门(二十):封装只包含头文件(header_only)的库示例》
《conan入门(二十一):解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c》
《conan入门(二十二):编译 openssl要求python 3.7以上版本》
《conan入门(二十三):Windows下MinGW编译libcurl》
《conan入门(二十四):通过CONAN_DISABLE_CHECK_COMPILER禁用编译器检查》
《conan入门(二十五):imports将包安装到本地项目或其他指定位置》

这篇关于conan入门(三):上传预编译的库(artifact)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161095

相关文章

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性: