在实习公司,使用conan来管理一些链接库,刚来公司我有点蒙,5天时间就学conan了,现总结一下,因为conan真的不是那么的好用,加上可参考资料很少,大概把我遇到的问题总结一下。
conan是包管理工具,怎么理解呢,就比如你要libevent网络库,他再有其他其他依赖,就给一个库一个库的装,而使用conan你用那个库,依赖的库也都帮你下载好了。conan是用python写的,所以一定要有python运行环境了,conan官方文档,python的运行环境最好大于等于3.4。我用的是1.33版本的conan
安装
装好python环境之后,一般安装python都自带pip了
pip install conan 就能把他安装下来了,可以用conan --version
来验证一下是否安装成功。在安装的时候我遇到了一个问题,找不到conan这个命令,是因为pip安装的时候没把他加载到环境变量当中去,在搜索框搜索conan.exe将他所在的位置加到环境变量中即可!
更改默认的配置项
添加新的连接
看一下都有那些远程仓库
conan remote list
你要连接公司的仓库必须要给他定义个名字,不能拿网址直接连接,下面的conan-com就是别名。
conan remote add conan-com https://jfrog.XXXXXX./
网址是这个网址,我网址还配错了,还以为是jforg上面的网址,其实不然是箭头所指这个的网址。
添加账号和密码
密码和账号填公司给你的只需要改动这两个,conan-com就是上述所说的别名
conan user -p 密码 -r conan-com 账号
创建一个包
包的格式如下
包名/版本号@用户/目录
首先介绍一下官方文档的创建过程把
new 一个新包出来,这个为啥没遵守格式呢?问的好我也不晓得
conan new hello/0.1 -t
根据创建的py文件,拉取py中的git网址的代码就可以输出一个Hello World
conan create . demo/testing
创建一个能够上传服务器的包
我也不一定很正确的表述出来他的真实意思,但是我通过这些办法实践出来了
后面加个- -bare(是合并的,为了显示出来中间打了个空格),比如你在test这个文件夹下面点个git,写了如下的操作,当你上传到本地的时候,test目录里的东西都会跟着一起上传的,不加–bare则不会把文件夹的东西上传,我也觉得很神奇。
conan new boost/1.70@用户/channel --bare
这样就可以上传到本地啦。注意os、compiler.version、arch这三个参数,-f是强制覆盖本地的缓存
conan export-pkg . boost/1.70@thirdparty/jenkins -s os=Windows -s compiler.version=10 -s arch=x86_64 -f
os的参数有
[‘AIX’, ‘Android’, ‘Arduino’, ‘Emscripten’, ‘FreeBSD’, ‘Linux’, ‘Macos’, ‘Neutrino’, ‘SunOS’, ‘Windows’, ‘WindowsCE’, ‘WindowsStore’, ‘iOS’, ‘tvOS’, ‘watchOS’]
compiler可以设置的东西
[‘Visual Studio’, ‘apple-clang’, ‘clang’, ‘gcc’, ‘intel’, ‘qcc’, ‘sun-cc’]
compiler.version的参数有,这是在Visual Studio的版本下
[‘10’, ‘11’, ‘12’, ‘14’, ‘15’, ‘16’, ‘8’, ‘9’]
compiler=gcc 的时候compiler.version是下面的
[‘10’, ‘10.1’, ‘4.1’, ‘4.4’, ‘4.5’, ‘4.6’, ‘4.7’, ‘4.8’, ‘4.9’, ‘5’, ‘5.1’, ‘5.2’, ‘5.3’, ‘5.4’, ‘5.5’, ‘6’, ‘6.1’, ‘6.2’, ‘6.3’, ‘6.4’, ‘6.5’, ‘7’, ‘7.1’, ‘7.2’, ‘7.3’, ‘7.4’, ‘7.5’, ‘8’, ‘8.1’, ‘8.2’, ‘8.3’, ‘8.4’, ‘9’, ‘9.1’, ‘9.2’, ‘9.3’]
arch有的参数
[‘armv4’, ‘armv4i’, ‘armv5el’, ‘armv5hf’, ‘armv6’, ‘armv7’, ‘armv7hf’, ‘armv7k’, ‘armv7s’, ‘armv8’, ‘armv8.3’, ‘armv8_32’,
‘asm.js’, ‘avr’, ‘mips’, ‘mips64’, ‘ppc32’, ‘ppc32be’, ‘ppc64’, ‘ppc64le’, ‘s390’, ‘s390x’, ‘sh4le’, ‘sparc’, ‘sparcv9’, ‘wasm’,
‘x86’, ‘x86_64’]
默认是release版本的可以设置 -s build_type这一参数
[‘Debug’, ‘MinSizeRel’, ‘None’, ‘RelWithDebInfo’, ‘Release’]
至此我们的包以及创建到本地了,等待着上传
上传
找一个能够上传服务器账号的,在执行一遍,账号就能变更成功了
conan user -p 密码 -r conan-com 账号
把刚才创建的包就可以上传过去了
conan upload boost/1.70@用户名/channel -r=conan-com --all
在jfrog上可以清楚的看到有这个包了
总结一下上传包的步骤
conan new boost/1.70@用户/channel --bare
conan export-pkg . boost/1.70@thirdparty/jenkins -s os=Windows
s compiler.version=10 -s arch=x86_64 -f
conan user -p 密码 -r conan-com 账号
conan upload boost/1.70@用户名/channel -r=conan-com --all
安装一个包就很简单了
conan install conanfile_config_x86_vs2010.txt -r=xxx -s arch=x86 -s arch_build=x86
这样就OK啦。信息一定要都对应准确(包名/版本号@用户/目录),如果不正确,哈希值会不一样,导致远程仓库的文件拉不下来。如果对应文件没拉下来,仔细检查一下是否都写正确了。别忘了再写一个conanfile_config_x86_vs2010.txt文件,随便取名就行。包名/版本号@用户/目录,我们公司的用户直接就是文件名了,我觉得挺合理的了。imports是放在那个目录下
[requires]
boost/1.70@XXX/XXXX
openssl/1.0.1@XXX/XXXX
zlib/1.2.11@XXX/XXXX
[imports]
., * -> ..\3rdparty\precompiled\windows-x86
option的使用,官方的文档
options的官方文档
下面是我的个人的用法,打包到jfrog上一个库例如boost库,底下有两个文件夹lib库和dll库,加上@ folder=True就代表zlib的lib放在zlib文件夹下面去,openssl的lib库放到openssl文件夹下,会自动帮你创建好文件夹的。 @ root_package=zlib相当于指定拉下来的XXX库放在XXX的位置上
lib, *.lib -> ..\3rdparty\precompiled\windows-x86 @ folder=True
dll, *dll -> ..\3rdparty\precompiled\windows-x86\dll
lib, *.lib -> ..\3rdparty\precompiled\windows-x86 @ root_package=zlib