C语言■Github架构师解读Cu002FC++应用包管理的Why和How( 三 )


本文插图

综上所述 , 与Java、JavaScript等使用的类似 , Conan为C/C++开发者提供了一个成熟的、功能完整、工具完备的包管理解决方案 , 能够辅助C/C++的开发者创建稳定、高效、一致、可重复的DevOps流水线 。
四、如何在C/C++应用中使用Conan Johannes在演讲中还通过演示 , 展示了如何基于Conan , 实现便捷、高效的C/C++应用的构建 。
Johannes所用的例子不是简单的“Hello World” , 而是github上一个真实项目:
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

要使用Conan , 我们只需为每一个C/C++应用增加一个conanfile.txt,用以描述其依赖关系:
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

利用“conan remote add”命令 , 可以将Conan客户端和Conan的包仓库建立关联 , 再执行“conan install” , 就可以将符合目标环境需求的所有依赖二进制包下载在本地 。
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

在编辑构建参数 , 如使用CMake构建 , 就修改CMakeLists.txt , 加入conan的配置 , 就可以集成下载的依赖二进制包 , 完成C/C++应用的构建 。
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

除了直接引用Conan仓库中已有的包及其二进制文件 , 利用Conan也可以创建自己开发的Conan包作为库 , 供其他C/C++应用依赖 。 Johannes还以github上的另一个项目演示了如何创建自己的Conan包:
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

要创建Conan的库包 , 需要为项目增加conanfile.py文件 , 如上图中的右半部分 , 改py文件就对应了之前提到的Conan包的Recipe,它除了描述了该包的基本信息之外 , 还通过函数定义了如何构建该库包得到二进制文件的过程 。
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

通过执行“conan create”命令 , 我们就可以生成自定义的Conan包作为内部库 , 再执行“conan upload”将其上传到Conan包仓库 , 就可以被其他C/C++应用引用、依赖了 。
此外 , Conan还可以与Jenkins等工具集成 , 通过自动化、并行的方式 , 一次性构建出同一版本包 , 针对不同目标环境的所有二进制文件:
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

最后 , 基于Conan的包管理方案 , 通过与GitHub、Jenkins、Artifactory、Bintray等工具对接 , 可以实现完整的C/C++应用的DevOps流水线:
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

通过演示可以看出 , 在C/C++应用中引入Conan的包管理 , 方式是直观、简便的 , 附加的工作负载并不多 。 而通过与各种工具的集成 , 可以基于Conan方便地创建C/C++应用的DevOps流水线 , 满足敏捷的需求 。
五、总结 敏捷化是目前业界应用研发的发展方向 。 通过实施敏捷化 , 我们可以实现迅速的、持续的产品交付 , 从而尽早发现问题 , 尽早解决问题 。 而且 , 通过快速、持续的交付 , 我们也可以获得用户持续的反馈 , 渐进明细地挖掘和实现用户的真正需求 。
C语言■Github架构师解读Cu002FC++应用包管理的Why和How
本文插图

对于C/C++应用及开发者来说 , 基于Conan的包管理方案 , 以及与DevOps领域工具的集成使用 , 可以创建便捷、高效、一致性、可重复的DevOps流水线 , 从而满足敏捷化的需求 。


推荐阅读