conan使用(二)--创建私有仓库
前面我们已经能够使用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使用(二)--创建私有仓库的更多相关文章
- docker基础——自定义镜像、创建私有仓库、查看 docker 运行状态
一.自定义镜像 1,案例1 要求:请自定义一个 docker 镜像,基于 hub.c.163.com/library/centos,要求创建出来的镜像在生成容器的时候,可以直接使用 ifconfig ...
- docker创建私有仓库
由于网速和大中华局域网效果,使得我们在DockerHub下载镜像的速度很慢,甚至一些国内的镜像仓库,也感觉速度不是很好.所以,很有必要在本地或者一个我们访问很快速的地方(自己的云服务器)搭建一套镜像仓 ...
- CocoaPods 创建私有仓库
这里有个坑首先需要注意,创建私有cocoapods仓库需要两个git仓库,即代码仓库,Specs文件仓库. 一.创建私有库 1.创建自己源码仓库,假设是A.git; 2.对A仓库: git add . ...
- docker for mac 创建私有仓库
拉取镜像 docker pull registry 运行registry run -d -p : -v /Users/huangenai/docker/registry:/var/lib/regist ...
- 转 docker创建私有仓库和k8s中使用私有镜像
docker私有仓库建立 环境说明我们选取192.168.5.2做私有仓库地址yum install docker -y1.启动docker仓库端口服务 docker run -d -p 5000:5 ...
- Docker 利用registry创建私有仓库
一.Docker-registry镜像 下载地址 官方镜像下载比较慢,因为人品问题一直下载不成功,所以选择了国内的镜像. daocloud: https://hub.daocloud.io/ 还有 ...
- win10 下安装docker,创建镜像,push镜像到私有仓库,创建私有仓库,修改镜像仓库地址
通过连接下载window docker安装文件,https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...
- docker 创建私有仓库
由于国内访问国际网络缓慢,从DockerHub下载镜像的速度感人,所以我们有必要在本地或者自己的云服务器上搭建一套镜像仓库,提高容器下载速度使用私有仓库需修改地址:Centos 7 Docker配置: ...
- docker创建私有仓库及存储image
Docker官方的Docker hub尽管提供了有非常多image,也基本上包括了我们须要使用的,可是其訪问起来比較慢.假设自己要定制image.多台server之间的共享使用此image非常不方便. ...
随机推荐
- 智能指针类模板(上)——STL中的智能指针
智能指针类模板智能指针本质上就是一个对象,它可以像原生指针那样来使用. 智能指针的意义-现代C++开发库中最重要的类模板之一-C++中自动内存管理的主要手段-能够在很大程度上避开内存相关的问题 1.内 ...
- Linux中自旋锁
传统的spinlock Linux的的内核最常见的锁是自旋锁.自旋锁最多只能被一个可执行线程持有.如果一个执行线程试图获得一个被已经持有(争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新 ...
- day79_10_28git使用基础
一.git与svn比较. git就是版本控制器,控制的对象是开发的项目代码. 可以根具时间轴进行回滚代码,改变代码版本. svn的特点就是服务版与用户版分离,当开发这需要进行开发时,需要先在代码仓库中 ...
- 线程休眠sleep
一.sleep的作用 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线程休 ...
- 关于字符串在ie浏览器拼接问题
常用的字符串在ie浏览器拼接不识别的问题,建议不要使用字符串拼接,可直接用jquery添加方便快捷一些
- vue.js操作元素属性
vue动态操作div的class 看代码: <!doctype html> <html lang="en"> <head> <meta c ...
- css样式重置 移动端适配
css 默认样式重置 @charset "utf-8"; *{margin:0;padding:0;} img {border:none; display:block;} em, ...
- tensorflow之tf.shape()
tf.shape()这个方法就相当于numpy当中shape属性. 下面通过列子来了解: 具体而言,tf.shape是用来获取张量的维度(shape).
- AngleSharp 实战(01)之最简单的示例
文档地址:https://anglesharp.github.io/docs/Examples.html 直接贴代码了: using System; using System.Linq; using ...
- 阿里云 CDN 业务基于边缘容器的云原生转型实践
导读:本文基于边缘容器的阿里云 CDN 云原生实践, 涵盖了边缘容器的背景和趋势,边缘托管集群 ACK Managed Edge K8s(文中简称“Edge@ACK”) 的能力.架构,以及基于边缘容器 ...