Conan使用初体验

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 "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;
 }

而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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章