1 Conan是什么?
Conan是一个基于python的c++包管理工具,起到pip之于python,maven之于java,npm之于js的作用
Conan支持多种c++构建工具,Autoconfig、cmake、boost、qmake都可以
Conan支持中心化和分布式2种包管理部署,即可以搭建私服
2 三方库部署示例
以官方文档的项目作为实际体验示例:
项目的git路径:https://github.com/conan-io/examples
这个工程下,实际上有好几构建目标,我们需要构建的目标是examples\libraries\poco\md5,以下是项目的已有文件
md5.cpp就是本次构建的源文件,依赖三方库proc
#include "Poco/MD5Engine.h" #include <iostream> int main(int argc, char** argv) |
而Conan的作用就是从远程包管理中心下载三方库,并部署到本地PC上,并且因为使用cmake作为构建工具,成功部署三方包以后,Conan自动产生引入三方库的cmake文件,供用户的cmake文件inlcude
部署三方库的步骤:
1) 搜索包管理中心的库,类似apt-catch search
$ conan search Poco --remote=conan-center Existing package recipes:
Poco/1.7.8p3@pocoproject/stable Poco/1.7.9@pocoproject/stable Poco/1.7.9p1@pocoproject/stable Poco/1.7.9p2@pocoproject/stable Poco/1.8.0.1@pocoproject/stable Poco/1.8.0@pocoproject/stable Poco/1.8.1@pocoproject/stable Poco/1.9.0@pocoproject/stable Poco/1.9.1@pocoproject/stable Poco/1.9.2@pocoproject/stable |
2) 查看包详情
$ conan inspect Poco/1.9.0@pocoproject/stable ... name: Poco version: 1.9.0 url: http://github.com/pocoproject/conan-poco license: The Boost Software License 1.0 author: None description: Modern, powerful open source C++ class libraries for building network- and internet-based applications that run on desktop, server, mobile and embedded systems. generators: ('cmake', 'txt') exports: None exports_sources: ('CMakeLists.txt', 'PocoMacros.cmake') short_paths: False apply_env: True build_policy: None settings: ('os', 'arch', 'compiler', 'build_type') options: enable_apacheconnector: [True, False] shared: [True, False] default_options: enable_apacheconnector: False shared: False |
3) 编写Conan依赖描述文件conanfile.txt,决定从仓库下载部署什么依赖库
[requires] Poco/1.9.0@pocoproject/stable #依赖库名称版本等
[generators] cmake #构建工具 |
4) 安装部署包
$ mkdir build && cd build $ conan install .. ... Requirements OpenSSL/1.0.2o@conan/stable from 'conan-center' - Downloaded Poco/1.9.0@pocoproject/stable from 'conan-center' - Cache zlib/1.2.11@conan/stable from 'conan-center' - Downloaded Packages OpenSSL/1.0.2o@conan/stable:606fdb601e335c2001bdf31d478826b644747077 - Download Poco/1.9.0@pocoproject/stable:09378ed7f51185386e9f04b212b79fe2d12d005c - Download zlib/1.2.11@conan/stable:6cc50b139b9c3d27b3e9042d5f5372d327b3a9f7 - Download
zlib/1.2.11@conan/stable: Retrieving package 6cc50b139b9c3d27b3e9042d5f5372d327b3a9f7 from remote 'conan-center' ... Downloading conan_package.tgz [==================================================] 99.8KB/99.8KB ... zlib/1.2.11@conan/stable: Package installed 6cc50b139b9c3d27b3e9042d5f5372d327b3a9f7 OpenSSL/1.0.2o@conan/stable: Retrieving package 606fdb601e335c2001bdf31d478826b644747077 from remote 'conan-center' ... Downloading conan_package.tgz [==================================================] 5.5MB/5.5MB ... OpenSSL/1.0.2o@conan/stable: Package installed 606fdb601e335c2001bdf31d478826b644747077 Poco/1.9.0@pocoproject/stable: Retrieving package 09378ed7f51185386e9f04b212b79fe2d12d005c from remote 'conan-center' ... Downloading conan_package.tgz [==================================================] 11.5MB/11.5MB ... Poco/1.9.0@pocoproject/stable: Package installed 09378ed7f51185386e9f04b212b79fe2d12d005c PROJECT: Generator cmake created conanbuildinfo.cmake PROJECT: Generator txt created conanbuildinfo.txt PROJECT: Generated conaninfo.txt |
这个步骤完毕后,将产生如下结果:
/build路径下会产生如下文件,都是部署的三方库的一些信息,比如中提供三方库启用的编译选项、依赖的依赖、cpu架构、版本等基本信息。
对三方库的用户来说最关心的还是conanbuildinfo.cmake,这个文件提供使用cmake构建编译目标是引入三方库的信息,包括头文件路径、库路径等
5) 构建项目
编写构建项目的cmake脚本,并引入conanbuildinfo.cmake
cmake_minimum_required(VERSION 2.8.12) project(MD5Encrypter)
if(CMAKE_VERSION VERSION_LESS 3.0.0) include(CheckCXXCompilerFlag) check_cxx_compiler_flag(-std=c++11 COMPILER_SUPPORTS_CXX11) check_cxx_compiler_flag(-std=c++0x COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") endif() else() SET(CMAKE_CXX_STANDARD 11) SET(CMAKE_CXX_STANDARD_REQUIRED ON) endif()
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup()
add_executable(md5 md5.cpp) target_link_libraries(md5 ${CONAN_LIBS}) |
cmake .. -G"Visual Studio 12 2013 Win64"
cmake .. && make