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