更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

实战C/C++ 的依赖管理工具 – Conan

  • 发布:C++培训
  • 来源:资料库
  • 时间:2017-09-29 16:25

在高级编程语言中,C/C++ 广受开发人员的亲睐,在语言排名上也名列前茅,生命力旺盛,而作为一个C/C++ 程序猿,随着开源模块(车轮)的不断创造,你在使用什么工具或方法管理你的依赖和模块化你的开发成果,创造属于你的世界车轮,你还在用 GIT/SVN 管理 C/C++ 的依赖吗?目前已经有爱立信等国际大公司大规模使用 Conan 做C++的包依赖的管理。今天跟大家一起实战 Conan 进行 C/C++ 依赖管理。

背景

具体背景和介绍可以穿越到我们上一篇 C/C++ 依赖原理工具,这里作简单回顾,本篇文章主要进行实战和落地。

大部分语言都已经有了专门的依赖解析工具,例如 Maven,Pypi,NPM。我们可以使用 Maven Package 来下载第三方依赖并进行编译构建。

但是 C/C++呢?缺少一个统一的依赖管理的工具,这是 C/C++开发者的一大痛点。

这个问题是由于一些历史原因导致的:

1. 不同的操作系统,不同的编译器和芯片架构

2. 不同的构建系统

3. 不同的获取依赖方法

Conan依赖管理工具优点

通过使用 Conan,我们可以得到以下收益

• 统一本地中心仓库(私服),去中心化。

• 统一集成风格与规范,依赖管理变的更简单(跨平台多环境)

• 方便团队共享模块,减少重复车轮,降低工程大小

• 降低不同编译环境依赖的复杂度

• 版本化管理,保证一致性

• 减少人工拷贝等操作带来的风险

• 依赖编译后的文件,加快构建速度

实战 Conan ,进行依赖管理

下面,我们分几个步骤进行 Conan 的实战与落地:

1. 安装 Conan 客户端

2. Conan 全局配置介绍

3. 创建 Demo 项目使用 Conan 依赖进行编译构建

4. 安装 Conan 私服 Artifactory

5. 创建一个新的模块并上传到私服,供其他人员依赖使用

6. 模块开发测试生命周期管理实践

7. 一键进行不同环境编译构建

8. 迁移现有项目到 Conan 项目

Setup 安装

支持以下方式安装:

Binaries, pip, brew, from source code…

我的环境(Mac):

– $ brew install conan

– $ brew install cmake

Conan 全局配置文件

conan.conf

包含本地包存储路径、日志级别,默认构建参数等全局变量。

settings.yml

预定义了 Conan 执行命令时的参数范围,如操作系统,编译器及芯片架构等。

registry.txt

中心仓库或公司内部私服的服务器地址及用户认证信息。

创建 Demo 项目并使用 Conan

依赖进行编译构建

项目结构如下:

其中 main.cpp 是新开发的项目代码,conanfile.txt 定义依赖哪些第三方模块。

main.cpp

其中 include 一个已存在模块,其中包含 hello.h 文件。

conanfile.txt

Requires 标签描述依赖模块坐标

Hello/0.1@demo/testing 对应 模块名称/版本@user/channel(Channel 用于区分环境或用途)

Generators 标签描述对应开发编译工具,会对应生成用于编译构建的文件

指定 CMake 会生成对应 CMake 规范工程文件,包含编译需要的依赖配置,同理 visual_studio。

编译构建

创建并进入 Build 目录,执行 Conan Install 命令,进行依赖下载, -s 可以指定编译的芯片架构,同时生成相应 CMake 标准工程文件,之后可以通过 CMake 进行编译产生二进制可执行文件 Greet。

安装 Conan 私服 Artifactory

本次 Demo 使用 Artifactory 作为 Conan 私服。

JFrog Artifactory 已经支持 Conan 仓库,全力加速 C/C++开发。

安装引导参考官方文档:#/confluence/

另附30天免费试用版申请链接:

#/artifactory/free-trial/?lang=zh-hans#High-Availability

创建一个新模块并上传到私服

使用 Conan New 命令创建一个模块包。

该命令会生成 conanfile.py 文件,该文件定义了功能模块的基本描述(坐标),以及模块构建的生命周期,包括:源码、配置、构建、打包等阶段,并由 Python文件定义,可以自行灵活修改。

之后可以通过 Conan Install 命令按照生命周期进行编译构建。

构建之后通过 Conan Export 命令导出模块到本地仓库,可以在本地为其他项目提供依赖,类似 Mvn Install。

同时我们可以上传到公司私服,对外提供依赖服务,使用 Conan Upload 命令将模块上传到私服,-r 参数可以指定具体私服。

上传到私服效果展示:

模块开发测试生命周期管理实践

软件开发都会有其对应的生命周期,开发,测试,生产,Conan 同时对此做了相应支持,不难发现,上文中在模块的坐标定义中已有相应说明,Hello/0.1@user/testing. 其中 Testing 描述了软件生命周期中对应的阶段。

当我们测试通过之后,我们可以通过命令或 API 将包快速升级到生产阶段,避免多次构建。

一键进行不同环境编译构建

C/C++ 日常开发中会遇到需要在不同架构 ,不同编译器版本上进行测试,工作量不小,在 Conan 官网和社区,也提供了很多提高效率的工具:

• Pip install conan-package-tools

• Travis-ci (Linux, OSX), with docker

• Appveyor (Win)

通过借助 Docker 构建不同架构或不同编译器版本(gcc 4.6,4.8,5.2,5.3 etc)的二进制包,进行测试或发布, 可以帮助我们实现一键编译,大大提高工作效率。

迁移现有项目到 Conan 项目

有了强大的依赖管理工具,就需要考虑迁移我们现有项目到 Conan 上来,原则上迁移可以选择一个项目团队先进行试点。上文中创建一个新的模块中提到构建生命周期,我们可以为迁移项目创建相应的 conanfile.py, 并根据公司情况自定义各个阶段的执行过程,成熟形成一定规范之后进行大规模迁移。

总结

Conan 为我们提供了统一的依赖管理和构建规范,通过统一 Conanfile 来描述依赖模块的坐标,并支持主流构建编译工具,CMake,Visual Studio xcode等。同时 Conan 也支持其他类型语言的依赖管理,例如现在很火的 Golang。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C程序变量和C运算符的初步认识
下一篇:C++中引用(&)的用法和应用实例

超全的C语言标识符知识

C指针——指针类型转换

C指针——指针和结构类型的关系

C指针——数组和指针的关系

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省