conan入门(三):上传预编译的库(artifact)
发布时间 - 2025-07-15 00:00:00 点击率:次在许多情况下,我们需要从现有二进制文件创建包,例如第三方或供应商提供的c++/c++库(仅包含include和lib目录),或者在引入conan包管理之前手动编译的c/c++库。在这些情况下,我们不需要conan从源代码重新编译,因为这可能既费时又费力,甚至根本不可行。以下是我们可以考虑直接将本地已经编译好的二进制文件生成conan包的情况:
当无法从源代码构建包时(当只有预编译的库可用时)。在工件(artifact)开发阶段,需要频繁打包以供其他应用程序使用。此时,我们只需要将编译好的工件快速提供给使用方,而不需要重新编译,因此不想调用conan create。如果您使用IDE或在本地调用conan build命令,此方法将保留您的构建缓存。本文以cJSON为例,介绍如何将预编译的二进制库(artifact)上传到conan。
cjson.build是我之前用于编译cJSON的脚本,可以使用armcc、gcc、MSVC编译linux-arm、linux-armhf、linux-x86_64、windows-x86_64平台的库。
现在我打算使用conan进行包管理,对于我来说,将这些已经预编译好的库上传到conan私有制品库是最省事的方法。
因此,我参考了conan的官方文档《Packaging Existing Binaries》,实现了将arm平台预编译库上传到私有制品库。
首先,使用conan new命令创建基本配置:
$ cd cjson.build/release/ $ conan new cjson/1.7.15 --bare File saved: conanfile.py
conan new会在当前文件夹下生成conanfile.py,我修改了其中的description、url、license、author、topics为有意义的值:
from conans import ConanFile, tools
class 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接下来,使用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
os: ['AIX', 'Android', 'Arduino', 'Emscripten', 'FreeBSD', 'Linux', 'Macos', 'Neutrino', 'SunOS', 'VxWorks', 'Windows', 'WindowsCE', 'WindowsStore', 'baremetal', 'iOS', 'tvOS', 'watchOS'] compiler: 可能的值包括 ['Visual Studio', 'apple-clang', 'clang', 'gcc', 'intel', 'intel-cc', 'mcst-lcc', 'msvc', 'qcc', 'sun-cc'] arch:可能的值包括 ['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://www./link/59af62180b0d04edd54a5f5ace7fb433
最后,执行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
登录JFrog Artifactory后,可以看到刚才上传的包。
# linux
# git
# windows
# ai
# c++
# macos
# cos
# 本地仓库
# html
# include
# JS
# ide
# visual studio
# android
# ios
# https
# wasm
# 源代码
# 您的
# 情况下
# 如果您
# 不需要
# 只需
# 适用于
# 会在
# 我们可以
# 而不
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
如何在云指建站中生成FTP站点?
如何在建站之星绑定自定义域名?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
iOS正则表达式验证手机号、邮箱、身份证号等
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
Python自动化办公教程_ExcelWordPDF批量处理案例
高端建站如何打造兼具美学与转化的品牌官网?
JS碰撞运动实现方法详解
做企业网站制作流程,企业网站制作基本流程有哪些?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
怎么用AI帮你为初创公司进行市场定位分析?
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
如何在阿里云域名上完成建站全流程?
JavaScript实现Fly Bird小游戏
如何在局域网内绑定自建网站域名?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
怎么用AI帮你设计一套个性化的手机App图标?
如何在Windows 2008云服务器安全搭建网站?
Laravel如何配置任务调度?(Cron Job示例)
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
北京企业网站设计制作公司,北京铁路集团官方网站?
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
PHP 500报错的快速解决方法
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
如何快速搭建FTP站点实现文件共享?
如何在IIS中配置站点IP、端口及主机头?
EditPlus 正则表达式 实战(3)
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
微信小程序 HTTPS报错整理常见问题及解决方案
如何构建满足综合性能需求的优质建站方案?
5种Android数据存储方式汇总
如何快速使用云服务器搭建个人网站?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Laravel如何配置和使用缓存?(Redis代码示例)
IOS倒计时设置UIButton标题title的抖动问题
如何续费美橙建站之星域名及服务?


/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