conan是C和C ++语言的依赖项和程序包管理器。它是免费和开源的,并且可以在所有平台上使用,包括:Windows、Linux、OSX、FreeBSD、Solaris等,并且可以用于开发所有目标,包括:嵌入式、移动(iOS、Android)和裸机。它还与所有构建系统集成,例如:CMake、Visual Studio(MSBuild)、Makefile、SCons等,也包括专有系统等。
它是专门为加速C和C ++项目的开发和持续集成而设计和优化的。借助完全的二进制管理,它可以在所有平台上使用完全相同的过程为包的任意数量的不同版本创建和重用任意数量的不同二进制文件用于不同的配置,例如:体系结构、编译器版本等。由于它是分散式的,因此很容易运行您自己的服务器以私下托管您自己的软件包和二进制文件,而无需共享它们。建议使用免费的JFrog Artifactory社区版(CE),由conan服务器在您的控制下私下托管您自己的程序包。
2.conan特点
conan成熟稳定,对向前兼容性有坚定的承诺,并有一个完整的团队全职致力于其改进和支持。它由一个伟大的社区支持和使用,从conancenter中的开源贡献者和包创建者到数千个使用它的团队和公司。
conan是具有客户端-服务器体系结构的分散式软件包管理器。这意味着客户端可以从不同的服务器获取软件包,也可以将软件包上载到不同的服务器,类似于“git”推拉模型到/从git远程服务器。
从较高的角度来看,服务器只是程序包存储。他们不构建和创建包。这些包是由客户端创建的,并且如果二进制文件是从源代码构建的,则该编译也将由客户端应用程序完成。
3.conan安装
conan是python开发的,都可以使用python的包管理工具pip下载。
pip install conan
查看conan版本
conan --version
更新conan
pip install conan --upgrade
4.conan常用命令
# 搜索包
# --remote=conan-center 指定使用conan官方提供的仓库
conan search <包名> --remote=conan-center
#eg:
conan search open* --remote=conan-center
结果是一个列表 openal/1.18.2@bincrafters/stable,格式为 <包名>/版本@公司/渠道
带有@的为已经有使用上传过二进制库,conan强烈建议使用不带有@的包
# 检查包
conan inspect <包名>/<版本>
# 自动检测并生成默认配置
$ conan profile new default --detect # Generates default profile detecting GCC and sets old ABI
#修改默认配置的编译器设置
$ conan profile update settings.compiler.libcxx=libstdc++11 default # Sets libcxx to C++11 ABI
# 配置仓库,执行该命令会在当前目录生成conan的工程信息
conan install <conanfile.txt所在的目录>
# 编译确实二进制的包
conan install <conanfile.txt所在的目录> --build=missing
# 指定编译器和系统
conan install <conanfile.txt所在的目录> --settings os="Linux" --settings compiler="gcc"
# 指定配置,默认profile=default
conan install <conanfile.txt所在的目录> --profile=gcc_x64
#删除内容
conan reme <包名>/<版本号>@[公司]/[渠道]
# 查看工程信息
conan info <conanfile.txt所在的目录>
# 生成工程信息图标
conan info <conanfile.txt所在的目录> --graph=file.html
5.官方文档
Demo链接和cmake集成的CMakeLists.txt文件示例。
cmake_minimum_required(VERSION 2.8.12)
project(MD5Encrypter)
add_definitions("-std=c++11")
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) # 引用conan 生成的包信息
conan_basic_setup() # 使conan 包信息生效
add_executable(md5 md5.cpp)
target_link_libraries(md5 ${CONAN_LIBS})