对于新一代的编程语言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" #includeint 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
三、编译时使用依赖库
如何在编译时使用之前下载的依赖库呢?
之前的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 ABIconan profile update settings.compiler.libcxx=libstdc++11 default
然后在CMakeLists.txt所在目录,执行:
cmake .
make
在bin目录下生成md5可执行文件,这个可执行的文件是静态链接poco库的,用这种方法编译的可执行文件都是静态链接conan下载的库的。
到此这篇关于Conan中的C/C++的依赖管理的文章就介绍到这了,更多相关C++的依赖管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!