管理项目的包
Conan 使用一个叫做conanfile.txt的文件来描述工程依赖和导出相关的文件
更进阶的,可以使用conanfile.py来精确控制这个过程
conanfile.txt
例子
[requires]mypackage/1.0.0@company/stable#包名,类似 project/library.#版本号,可是是数字或任意字符创#包的所有者,类似c++命名空间,使不同用户可以有相同名字的(不同功能)的包#频道,一般为“stable"或"testing",区分库的版本没有改变,但是包的配方已经进化了[generators]cmake[options] #这里可以添加包的选项poco:shared=True # PACKAGE:OPTION=VALUE[imports] #共享库复制到可执行文件文件夹中bin, *.dll -> ./bin # Copies all dll files from packages bin folder to my "bin" folderlib, *.dylib* -> ./bin # Copies all dylib files from packages lib folder to my "bin" folder
依赖冲突的问题
如果
- A —> C v1.0
- B —> C v1.2
那么,此时就会出现冲突。可以在[requires]中写入C/1.2@xxx/yyy,就可以强制用C的1.2版本。
包的选项[options]
conanfile.txt的[options]可以添加包的可选项
比如:默认安装qt是不具有qt3d组件的
[requires]qt/5.15.2[generators]cmake
我们可以使用命令来看此包的选项conan inspect qt/5.15.2
$ conan inspect qt/5.15.2name: qtversion: 5.15.2url: https://github.com/conan-io/conan-center-index...options:commercial: [True, False]...default_options:...qt3d: False...
此时,我们就可以通过[options]来打开这个选项
[requires]qt/5.15.2[generators]cmake[options]qt:qt3d=True
conanfile.py
from conans import ConanFile, CMake, toolsclass LibConan(ConanFile):requires = ["openscenegraph/3.6.5", "gdal/3.1.4", "libtiff/4.3.0"]generators = "cmake_find_package"def build(self):cmake = CMake(self) # it will find the packages by using our auto-generated FindXXX.cmake filescmake.configure()cmake.build()
命令
基础命令
# 在默认的中心仓库中搜索 boost 软件包。在不指定-r的情况下,默认搜索本地缓存conan search boost* -r=conancenter# 检查包,查看此包的元数据。如conan inspect poco/1.9.4conan inspect <包名>/<版本># 配置仓库,执行该命令会在当前目录生成conan的工程信息conan install <conanfile.txt所在的目录># 编译缺少的二进制包(如果服务器没有找到此包,可以尝试编译)conan install <conanfile.txt所在的目录> --build=missing# 指定编译器和系统conan install <conanfile.txt所在的目录> --settings os="Linux" --settings compiler="gcc"# 指定编译类型(-s即-settings)conan install <conanfile.txt所在的目录> -s build_type=Debug# 指定配置,默认profile=defaultconan install <conanfile.txt所在的目录> --profile=gcc_x64#删除内容conan reme <包名>/<版本号>@[公司]/[渠道]# 查看工程信息(查看依赖项等等)conan info <conanfile.txt所在的目录># 使用Dot或HTML格式生成依赖关系图conan info <conanfile.txt所在的目录> --graph=file.html
管理远端仓库地址
远端仓库地址是一个列表,并且有先后顺序
- 安装时,先检查本地缓存,再按列表先后顺序以此下载
```bash
添加源
conan remote add my-repo http://my-repo.com/xxx
或者使用insert来将其作为首个源
conan remote update my-repo http://my-repo.com/xxx —insert=0
展示所有源
conan remote list
删除一个源
conan remote remove my-repo
重命名
conan remote rename conancenter c
<a name="mSuad"></a>## 配置它的配置以及本地的二进制仓库均存储在用户目录下`~/.conan/`中(Windows上,是`%USERPROFILE%\.conan\`)<a name="BfQQ3"></a>### conan.conf1. `path`存储目录1. `download_cache`下载缓存目录```powershell[storage]# This is the default path, but you can write your own. It must be an absolute path or a# path beginning with "~" (if the environment var CONAN_USER_HOME is specified, this directory, even# with "~/", will be relative to the conan user home, not to the system user home)path = E:\conan\datadownload_cache = E:\conan\download_cache
设置代理
[proxies]http = http://dev-proxy.oa.com:8080https = http://dev-proxy.oa.com:8080
Profile
[settings]os=Windowsos_build=Windowsarch=x86_64arch_build=x86_64compiler=Visual Studiocompiler.version=17build_type=Release[options][build_requires][env]
Profile相关命令
# 查看名为default的profile文件conan profile show default# 自动检测并生成默认配置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
相关介绍
软件包
名称/版本@用户/渠道
- 渠道(Channel)用来描述是稳定版(Stable)还是测试版(Testing)等信息
举例:boost相关包名
boost/1.64.0@conan/stableboost/1.65.1@conan/stableboost/1.66.0@conan/stableboost/1.67.0@conan/stableboost/1.68.0@conan/stableboost/1.69.0@conan/stableboost/1.70.0@conan/stable
软件包仓库
背景
- NodeJS 的包管理器 npm 会把依赖存储到工程目录的node_modules文件夹中,此外也能安装全局的包
- Python 的包管理器 pip 能把包装到用户目录下或者是全局环境中,所以一般配合 venv 使之把包装在工程中不污染环境
默认情况下 Conan 只把包装在用户目录下。
但Conan还提供了一个环境变量CONAN_USER_HOME来让用户指定一个 Conan 的工作目录
- 这样就能起到类似于 Python 的 Virtual Environment 的作用
用户目录的软件包仓库被称为本地缓存(Local Cache);
那么同样的,服务器上也有一个软件包的仓库,文档中称为远端(Remote)
