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

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

1. 安装和配置Artifactory

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

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



然后安装:

  1. 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,然后在该目录下执行

  1. conan new Hello/1.0.1 -t

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



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

  1. from conans import ConanFile, CMake, tools
  2. class HelloConan(ConanFile):
  3. name = "Hello"
  4. version = "1.0.1"
  5. license = "<Put the package license here>"
  6. author = "<Put your name here> <And your email here>"
  7. url = "<Package recipe repository url here, for issues about the package>"
  8. description = "<Description of Hello here>"
  9. topics = ("<Put some tag here>", "<here>", "<and here>")
  10. settings = "os", "compiler", "build_type", "arch"
  11. options = {"shared": [True, False]}
  12. default_options = {"shared": False}
  13. generators = "cmake"
  14. def source(self):
  15. self.run("git clone https://github.com/conan-io/hello.git")
  16. # This small hack might be useful to guarantee proper /MT /MD linkage
  17. # in MSVC if the packaged project doesn't have variables to set it
  18. # properly
  19. tools.replace_in_file("hello/CMakeLists.txt", "PROJECT(HelloWorld)",
  20. '''PROJECT(HelloWorld)
  21. include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
  22. conan_basic_setup()''')
  23. def build(self):
  24. cmake = CMake(self)
  25. cmake.configure(source_folder="hello")
  26. cmake.build()
  27. # Explicit way:
  28. # self.run('cmake %s/hello %s'
  29. # % (self.source_folder, cmake.command_line))
  30. # self.run("cmake --build . %s" % cmake.build_config)
  31. def package(self):
  32. self.copy("*.h", dst="include", src="hello")
  33. self.copy("*hello.lib", dst="lib", keep_path=False)
  34. self.copy("*.dll", dst="bin", keep_path=False)
  35. self.copy("*.so", dst="lib", keep_path=False)
  36. self.copy("*.dylib", dst="lib", keep_path=False)
  37. self.copy("*.a", dst="lib", keep_path=False)
  38. def package_info(self):
  39. self.cpp_info.libs = ["hello"]
  • source函数是表示如何导入源文件,这里是指明了代码仓库;
  • build指明要如何编译;
  • package是打包你的项目。

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

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

  1. conan create . demo/testing

create命令会执行以下操作:

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

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

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

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

3. 上传包到服务器

上传包命令是:

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

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

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



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

4. 用法补充

4.1 不使用git导入源码

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

(1)HTTP下载

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

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

(2)本地代码

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

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

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. Html学习之四(页面布局)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. DRF--介绍和安装

    前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高.这种应用模式比较适合纯网页应用,但是当后端对接 ...

  3. CF1207G Indie Album

    题目链接 problem 有\(n\)个字符串,对于第\(i\)个字符串通过以下两种方式中的一个给出. \(1\; c\),该字符串只含一个字符\(c\). \(2\ x\ c\),该字符串为第\(x ...

  4. windows xp 安装后不能能ping,浏览器不能上网

    windows xp MSDN版本 下载地址: ed2k://|file|zh-hans_windows_xp_home_with_service_pack_3_x86_cd_x14-92408.is ...

  5. H3C S12508单板卡 通过bootware升级software版本

    H3C S12508单板卡 通过bootware升级software版本 案例:S12508更换主控板LST1MRPNC1 ,该板卡状态为Slave状态: 设备状态:S12508共2台做了堆叠,共含4 ...

  6. Vue.js安装及环境搭建

    Vue.js环境搭建-Windows版 步骤一:安装node.js 在搭建vue的开发环境之前,需要先下载node.js,vue的运行是要依赖于node的npm的管理工具来实现,node可以在官网或者 ...

  7. 小记 .NET Core 3.0 下 WPF 是如何运行的

    1. 解决方案架构 如图: 2. 生成的代码 如图: /// <summary> /// App /// </summary> public partial class App ...

  8. Neo4j 第九篇:查询数据(Match)

    Cypher使用match子句查询数据,是Cypher最基本的查询子句.在查询数据时,使用Match子句指定搜索的模式,这是从Neo4j数据库查询数据的最主要的方法.match子句之后通常会跟着whe ...

  9. IDEA的常用配置(Maven)一键导入及优化内存

    IDEA的常用配置一键导入 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载如图的压缩包 下载完成后解压缩,点击settings_bak,你会看 ...

  10. RSA加密方法

    /// <summary>        /// RSA加密        /// </summary>        /// <param name="dat ...