Conan使用入门

tl;dr

Conan 是C++的一个包管理工具,使得C++安装第三方库变的很方便。 类似于vs的NuGet

Conan的基本命令:

  • 查找库: conan search poco --remote=conan-center

  • 安装库:conan inspect poco/1.9.4

  • 安装到项目:conan install ..

  • conanfile.txt样例:

    1
    2
    3
    4
    5
    [requires]
    poco/1.9.4

    [generators]
    cmake
  • CMakeLists.txt 插入内容:

    1
    2
    include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
    conan_basic_setup()

安装

conan 依赖python,因此需要安装python, 最好是安装python3

然后使用命令安装即可

pip install conan

如果找不到pip命令, 一种原因是没有安装python,另一种是没将pip路径添加到path

自己还遇到了一种情况就是,在windows下,使用pip安装了之后,能找到这个程序,却找不多conan命令,就是找不到conan.exe可执行程序

这种情况一般是没将pip安装后的可执行程序的目录添加到path里, 用everything搜一下conan.exe在哪,把路径添加进去就好了。

配置

​ Conan 会在第一次启动时自动配置好默认的 Profile 和 Remote 设置。它的配置以及本地的二进制仓库均存储在用户目录下~/.conan/中(Windows上,是%USERPROFILE%\.conan\)。

其中用户配置文件为conan.conf,通常情况下无需修改,但当需要设置代理时,可以对其进行编辑。

1
2
3
[proxies]
http = ####代理地址
https = ####代理地址

包管理

官方文档中给出了一个项目demo, 顺便借助这个demo记录一下基本的使用。

查找本地库

conan search 可以查看本地已经缓存过的库有哪些

1
2
3
4
5
6
7
Existing package recipes:

boost/1.69.0
bzip2/1.0.8
openssl/1.0.2t
poco/1.10.0
zlib/1.2.11

以上是执行后的结果,安装有五个库, / 后面表示版本号

查找远程库

如果只是使用search则是在本地查找,如果版本可以接受可以直接用,避免总是从网上缓存过多的版本。

conan search poco --remote=conan-center

通过 --remote 参数指定源, conan-center则是conan的官方库,里面有大部分库的封装。 如果使用个人的或其他的源,指定地址即可。

1
2
3
4
5
6
$ conan search poco --remote=conan-center
Existing package recipes:

poco/1.8.1
poco/1.9.3
poco/1.9.4

显示有多个版本,可以选择一个安装。

安装远程的库

conan inspect poco/1.9.4

通过此命令安装1.9.4版本的poco库, 等待执行结束即可。

这个时候如果再从本地查找就能找到这个库了。

删除库

conan remove poco/1.9.4

会给予确认提示,确认后就可以删除了。

项目编译

项目配置

官方给出的demo代码

Demo.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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;
}

也可以从github上直接拉取

git clone https://github.com/conan-io/examples.git && cd examples/libraries/poco/md5

然后我们需要在项目路径添加一个conanfile.txt文件, 文件内主要记录conan的配置,依赖的库,版本,以及生成工具等等。

conanfile.txt

1
2
3
4
5
[requires]
poco/1.9.4

[generators]
cmake

构建工具使用cmake

指定编译器版本信息

1
$ conan profile update settings.compiler.libcxx=libstdc++11 default  # Sets libcxx to C++11 ABI

指定使用C++11编译

安装库

例如我们需要构建到build目录

1
2
$ mkdir build && cd build
$ conan install ..

当我们使用 install之后,就会生成一个conanbuildinfo.cmake文件,文件里面主要是将库依赖,我们需要将这个文件写到我们项目的CMakeLists.txt里面

CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
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(Demo Demo.cpp)
target_link_libraries(Demo ${CONAN_LIBS})

此时项目就配置好了。

编译运行

1
2
3
4
5
6
7
8
9
10
11
(win)
$ cmake .. -G "Visual Studio 16"
$ cmake --build . --config Release

(linux, mac)
$ cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
$ cmake --build .
...
[100%] Built target Demo
$ ./bin/Demo
c3fcd3d76192e4007dfb496cca67e13b

关于头文件

如果使用了ide或者ls, 在项目中直接使用 “” 包含头文件即可。

上传自己的包

TODO: 目前还没用到,需要的时候再补充 需要的可以阅读下方参考连接里面的官方文档。

搭建私有服务器

TODO: 目前还没用到,需要的时候再补充

参考连接: