前面我们已经能够使用conan来从公共服务器上拉取C/C++包来集成进我的工程中,但是在实际开发中,我们可能需要自己封装或使用非公开的库,那么自己搭建一个私服是个很现实的需求。

搭建conan私服有几种方式,这里介绍一种目前使用比较多的Artifactory方式。

1. 安装和配置Artifactory

我们以docker的方式拉取Artifactory镜像(这一步可能花费时间会比较久):

docker pull docker.bintray.io/jfrog/artifactory-cpp-ce



然后安装:

sudo docker run -d -p 8081:8081 --name artifactory-cpp-ce docker.bintray.io/jfrog/artifactory-cpp-ce



那么我们就已经创建了一个Artifactory服务器。通过8081端口可以直接访问。默认账号密码:admin(password)。

登录后我们可以跳过proxy设置,直接创建一个名为develope的conan仓库:

然后直接点击develope,它会告诉你怎么在客户端进行配置:



按照它的提示进行配置,注意替换、等字样;如果是不在同一台机器上,也请修正ip地址。

2. 本地创建conan包

首先创建一个新的目录conanpkg,然后在该目录下执行

conan new Hello/1.0.1 -t

使用-t参数的意义是生成一个测试包。



conanfile.py文件非常关键,它定义了如何打包,如何导入源文件:

from conans import ConanFile, CMake, tools

class HelloConan(ConanFile):
name = "Hello"
version = "1.0.1"
license = "<Put the package license here>"
author = "<Put your name here> <And your email here>"
url = "<Package recipe repository url here, for issues about the package>"
description = "<Description of Hello here>"
topics = ("<Put some tag here>", "<here>", "<and here>")
settings = "os", "compiler", "build_type", "arch"
options = {"shared": [True, False]}
default_options = {"shared": False}
generators = "cmake" def source(self):
self.run("git clone https://github.com/conan-io/hello.git")
# This small hack might be useful to guarantee proper /MT /MD linkage
# in MSVC if the packaged project doesn't have variables to set it
# properly
tools.replace_in_file("hello/CMakeLists.txt", "PROJECT(HelloWorld)",
'''PROJECT(HelloWorld)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()''') def build(self):
cmake = CMake(self)
cmake.configure(source_folder="hello")
cmake.build() # Explicit way:
# self.run('cmake %s/hello %s'
# % (self.source_folder, cmake.command_line))
# self.run("cmake --build . %s" % cmake.build_config) def package(self):
self.copy("*.h", dst="include", src="hello")
self.copy("*hello.lib", dst="lib", keep_path=False)
self.copy("*.dll", dst="bin", keep_path=False)
self.copy("*.so", dst="lib", keep_path=False)
self.copy("*.dylib", dst="lib", keep_path=False)
self.copy("*.a", dst="lib", keep_path=False) def package_info(self):
self.cpp_info.libs = ["hello"]
  • source函数是表示如何导入源文件,这里是指明了代码仓库;
  • build指明要如何编译;
  • package是打包你的项目。

test_package 目录下的代码是测试包代码,创建好包后你可以用它进行测试。

现在执行create命令进行打包:

conan create . demo/testing

create命令会执行以下操作:

  • 将conanfile.py从用户文件夹拷贝到conan的本地缓存中;
  • 安装包,强制从源构建它;
  • 移动到test_package文件夹并创建临时构建文件夹;
  • 执行conan install …,以安装test_package/conanfile.py的要求;
  • 构建并启动示例程序,分别调用test_package/conanfile.py文件的build()和test()方法。

即相当于执行了以下命令:

conan export . demo/testing
$ conan install Hello/1.0.1@demo/testing --build=Hello
# test
$ conan test test_package Hello/1.0.1@demo/testing

如此一个包就已经创建好了。

3. 上传包到服务器

上传包命令是:

conan upload <RECIPE> -r <REMOTE> --all

<RECIPE> 即是我们在经常用到的一个包名字:/@/。我们上面创建的包名字就是Hello/1.0.1@demo/testing。(上传需要进行账户密码验证)

此时远程服务器上就有了我们的包:



此时就可以像其它包一样正常在其它地方使用。

4. 用法补充

4.1 不使用git导入源码

上面的例子中是在source中使用git拉取代码,如果我们的代码不是在git上怎么办?

(1)HTTP下载

同样是在source函数中,可以使用http下载源码:

zip_name = "XXX"
tools.download("https://github.com/XXXXXXXXXXXXX/%s" % zip_name, zip_name)
tools.unzip(zip_name)
...

(2)本地代码

此时就不能使用source函数,需要删掉它,增加一个exports_sources 配置来代表你的源码目录:

class HelloConan(ConanFile):
name = "Hello"
version = "0.1"
license = "<Put the package license here>"
url = "<Package recipe repository url here, for issues about the package>"
description = "<Description of Hello here>"
settings = "os", "compiler", "build_type", "arch"
options = {"shared": [True, False]}
default_options = {"shared": False}
generators = "cmake"
exports_sources = "src/*"
...

conan使用(二)--创建私有仓库的更多相关文章

  1. docker基础——自定义镜像、创建私有仓库、查看 docker 运行状态

    一.自定义镜像 1,案例1 要求:请自定义一个 docker 镜像,基于 hub.c.163.com/library/centos,要求创建出来的镜像在生成容器的时候,可以直接使用 ifconfig ...

  2. docker创建私有仓库

    由于网速和大中华局域网效果,使得我们在DockerHub下载镜像的速度很慢,甚至一些国内的镜像仓库,也感觉速度不是很好.所以,很有必要在本地或者一个我们访问很快速的地方(自己的云服务器)搭建一套镜像仓 ...

  3. CocoaPods 创建私有仓库

    这里有个坑首先需要注意,创建私有cocoapods仓库需要两个git仓库,即代码仓库,Specs文件仓库. 一.创建私有库 1.创建自己源码仓库,假设是A.git; 2.对A仓库: git add . ...

  4. docker for mac 创建私有仓库

    拉取镜像 docker pull registry 运行registry run -d -p : -v /Users/huangenai/docker/registry:/var/lib/regist ...

  5. 转 docker创建私有仓库和k8s中使用私有镜像

    docker私有仓库建立 环境说明我们选取192.168.5.2做私有仓库地址yum install docker -y1.启动docker仓库端口服务 docker run -d -p 5000:5 ...

  6. Docker 利用registry创建私有仓库

    一.Docker-registry镜像 下载地址 官方镜像下载比较慢,因为人品问题一直下载不成功,所以选择了国内的镜像. daocloud:   https://hub.daocloud.io/ 还有 ...

  7. win10 下安装docker,创建镜像,push镜像到私有仓库,创建私有仓库,修改镜像仓库地址

    通过连接下载window docker安装文件,https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...

  8. docker 创建私有仓库

    由于国内访问国际网络缓慢,从DockerHub下载镜像的速度感人,所以我们有必要在本地或者自己的云服务器上搭建一套镜像仓库,提高容器下载速度使用私有仓库需修改地址:Centos 7 Docker配置: ...

  9. docker创建私有仓库及存储image

    Docker官方的Docker hub尽管提供了有非常多image,也基本上包括了我们须要使用的,可是其訪问起来比較慢.假设自己要定制image.多台server之间的共享使用此image非常不方便. ...

随机推荐

  1. 有用的link

    资料 了解oi 刘汝佳代码仓库(紫书 c++参考手册 2018年洛谷日报索引 2019年洛谷日报索引 (其他oj: luogu 虚拟判官(名校oj都有 离线bzoj题库 (有时候进不去请点:rxz大爷 ...

  2. 鲜贝7.3--postman安装

    Postman电脑客户端安装: Postman的安装非常简单,在windows系统只需要双击安装包,然后什么都不需要操作,它直接就自己完成了,如下图.如果是mac 也是跟普通软件的安装方法相同.在初次 ...

  3. pointNet代码

    介绍 组成 1.PointNet classification network分类网络 part segmentation network 数据集 1.point clouds sampled fro ...

  4. 药店商品销量分析(python)

    一.数据分析的步骤 二.提出问题 分析药店商品销售情况 1)月均消费次数 2)月均消费金额 3)客单价 4)消费趋势 5)热销商品.滞销商品 三.理解数据 销售数据源为excel文件 字段的含义: 共 ...

  5. 使用threaddump-analyzer 快速查看jvm thread 状态信息

    日常开发中,我们可以需要通过thread dump 查看线程信息,比如锁,spotify 团队提供了一个web 界面,很方便 以下是简单使用,同时添加了docker 支持 添加docker 支持 cl ...

  6. ksync

    #include <linux/init.h> #include <linux/module.h> #include <linux/types.h> #includ ...

  7. Git修改和配置用户名和邮箱

    git在push/push to时需要使用到user.name和user.email,切记一定要现配置好查看user.name/user.email git config user.name git ...

  8. IM开发者的零基础通信技术入门(三):国人通信方式的百年变迁

    [来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<中国通信的百年沉浮>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时内容有 ...

  9. 模型的细致程度--Level of Development

    模型的细致程度,英文称作Level of Details,也叫作Level of Development.描述了一个BIM模型构件单元从最低级的近似概念化的程度发展到最高级的演示级精度的步骤.美国建筑 ...

  10. Python 下载图片的三种方法

    import os os.makedirs('./image/', exist_ok=True) IMAGE_URL = "http://image.nationalgeographic.c ...