管理项目的包
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" folder
lib, *.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.2
name: qt
version: 5.15.2
url: 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, tools
class 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 files
cmake.configure()
cmake.build()
命令
基础命令
# 在默认的中心仓库中搜索 boost 软件包。在不指定-r的情况下,默认搜索本地缓存
conan search boost* -r=conancenter
# 检查包,查看此包的元数据。如conan inspect poco/1.9.4
conan 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=default
conan 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.conf
1. `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\data
download_cache = E:\conan\download_cache
设置代理
[proxies]
http = http://dev-proxy.oa.com:8080
https = http://dev-proxy.oa.com:8080
Profile
[settings]
os=Windows
os_build=Windows
arch=x86_64
arch_build=x86_64
compiler=Visual Studio
compiler.version=17
build_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/stable
boost/1.65.1@conan/stable
boost/1.66.0@conan/stable
boost/1.67.0@conan/stable
boost/1.68.0@conan/stable
boost/1.69.0@conan/stable
boost/1.70.0@conan/stable
软件包仓库
背景
- NodeJS 的包管理器 npm 会把依赖存储到工程目录的node_modules文件夹中,此外也能安装全局的包
- Python 的包管理器 pip 能把包装到用户目录下或者是全局环境中,所以一般配合 venv 使之把包装在工程中不污染环境
默认情况下 Conan 只把包装在用户目录下。
但Conan还提供了一个环境变量CONAN_USER_HOME
来让用户指定一个 Conan 的工作目录
- 这样就能起到类似于 Python 的 Virtual Environment 的作用
用户目录的软件包仓库被称为本地缓存(Local Cache);
那么同样的,服务器上也有一个软件包的仓库,文档中称为远端(Remote)