Conan中的C/C++的依赖管理,Conan的C/C++依赖管理解析

马肤

温馨提示:这篇文章已超过873天没有更新,请注意相关的内容是否还可用!


Conan中的C/C++的依赖管理,Conan的C/C++依赖管理解析 第1张


对于新一代的编程语言Java、Python,当编译、运行时需要第三方的库,可以用语言自带的工具,下载这些依赖库,级联依赖的库也会被下载,部署时也会去下载或者用之前下载的。

而C/C++编译、运行时,可以链接操作系统里的动态库,这些库的下载需要手工执行yum,部署时也需要这样安装依赖库。

C/C++与Java、Python都有库依赖问题,但是C/C++语言没有自带的包管理机制,也许是因为C/C++更多的应用于系统程序领域,Java、Python更多用于应用程序领域,对快速开发和部署要求更高。

不过现在逐渐进化出C/C++的依赖管理工具,C/C++的编译部署也可以像Java、Python那样。

这个工具就是conan,当然还有别的C/C++依赖管理工具,不过我试用了一下conan,还是挺好用的。

下面用Getting Started — conan 1.56.0 documentation

的例子说明,这个例子编译一个cpp程序:

 #include "Poco/MD5Engine.h"
 #include "Poco/DigestStream.h"

 #include <iostream>

 int main(int argc, char** argv){
     Poco::MD5Engine md5;
     Poco::DigestOutputStream ds(md5);
     ds << "abcdefghijklmnopqrstuvwxyz";
     ds.close();
     std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl;
     return 0;
 }

这个程序用到了poco/1.9.4这个库,我们的方法是用conan下载,然后用cmake编译。

一、下载conan

这个conan是个Python3程序,它的获取可以通过pip install,例如:

pip install conan

二、下载/安装C/C++依赖库

当我们要编译的C/C++程序需要依赖某个库时,有了conan的包管理,不再需要在操作系统上用yum安装了,而是用conan install命令,这个命令会寻找conanfile.txt,然后安装里面指定的库:

[requires] poco/1.9.4

[generators] cmake

 [requires]段指定要安装的库/包的名称,[generators]指定为哪编译工具生成配置文件,这里生成cmake的配置文件,其中包括编译时使用这些库的编译选项。

然后在conanfile.txt所在目录下执行

conan install .

这一步生成了conanbuildinfo.cmake

三、编译时使用依赖库

如何在编译时使用之前下载的依赖库呢&#xff1f;

之前的conan install,在下载了依赖库时,也创建了cmake配置,只要把这些配置添加到cmake工程中,就可以在编译时使用这些依赖库了。

例如,创建CMakeLists.txt,内容如下:

 cmake_minimum_required(VERSION 2.8.12)
 project(MD5Encrypter)

 add_definitions("-std=c++11")

 include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
 conan_basic_setup()

 add_executable(md5 md5.cpp)
 target_link_libraries(md5 ${CONAN_LIBS})

对于版本大于5.1的GCC编译器,执行下面的命令,否则连接时会出错:

conan profile new default --detect  # Generates default profile detecting GCC and sets old ABI
conan profile update settings.compiler.libcxx=libstdc++11 default

然后在CMakeLists.txt所在目录,执行:

cmake .

make

在bin目录下生成md5可执行文件,这个可执行的文件是静态链接poco库的,用这种方法编译的可执行文件都是静态链接conan下载的库的。



0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 云开发运维一体化,构建高效、智能的云服务生态,云开发运维一体化,构建高效智能云服务生态,云开发运维一体化,构建高效智能云服务生态的蓝图探索,云开发运维一体化,构建高效智能云服务生态的蓝图探索与实践
  • 云端持续部署,加速软件开发与交付的新引擎,云端持续部署,推动软件开发与交付的新动力,云端持续部署,推动软件开发与交付的新引擎和新动力
  • 云容器化,数字化转型的新引擎,云容器化,数字化转型的新动力引擎,云容器化,数字化转型的新动力引擎
  • 云API管理,构建高效、安全的微服务架构,高效安全微服务架构,云API管理的构建之道,云API管理,构建高效安全微服务架构的秘诀
  • 云法律合规,确保数字化转型的稳健步伐,数字化转型中的云法律合规,稳健步伐的保障,云法律合规,数字化转型稳健步伐的保障之道
  • 云治理框架,构建高效、安全的云计算环境,构建高效安全的云计算环境,云治理框架的实践与应用,云治理框架实践与应用,构建高效安全的云计算环境之道,云治理框架,构建高效安全云计算环境的实践与应用之道,云治理框架,实践与应用之道,构建高效安全云计算环境,云治理框架,构建高效安全云计算环境的实践与应用之道,云治理框架,构建高效安全云计算环境的实践指南与应用之道,云治理框架,构建高效安全云计算环境的实践指南与应用之道
  • 云数据隐私,保护数字时代的个人秘密,云数据隐私,数字时代的个人秘密守护者
  • 深入探讨云服务质量,关键因素与提升策略,云服务质量提升,关键因素与策略分析,云服务质量深度解析,关键因素与提升策略探讨,云服务质量深度解析,关键因素与提升策略探讨,云服务质量深度解析,关键因素与提升策略探讨
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,321人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码