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

 

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