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

相关文章

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui