管理项目的包

Conan 使用一个叫做conanfile.txt的文件来描述工程依赖和导出相关的文件
更进阶的,可以使用conanfile.py来精确控制这个过程

conanfile.txt

例子

  1. [requires]
  2. mypackage/1.0.0@company/stable
  3. #包名,类似 project/library.
  4. #版本号,可是是数字或任意字符创
  5. #包的所有者,类似c++命名空间,使不同用户可以有相同名字的(不同功能)的包
  6. #频道,一般为“stable"或"testing",区分库的版本没有改变,但是包的配方已经进化了
  7. [generators]
  8. cmake
  9. [options] #这里可以添加包的选项
  10. poco:shared=True # PACKAGE:OPTION=VALUE
  11. [imports] #共享库复制到可执行文件文件夹中
  12. bin, *.dll -> ./bin # Copies all dll files from packages bin folder to my "bin" folder
  13. lib, *.dylib* -> ./bin # Copies all dylib files from packages lib folder to my "bin" folder

依赖冲突的问题

如果

  1. A —> C v1.0
  2. B —> C v1.2

那么,此时就会出现冲突。可以在[requires]中写入C/1.2@xxx/yyy,就可以强制用C的1.2版本。

包的选项[options]

conanfile.txt[options]可以添加包的可选项

比如:默认安装qt是不具有qt3d组件的

  1. [requires]
  2. qt/5.15.2
  3. [generators]
  4. cmake

我们可以使用命令来看此包的选项conan inspect qt/5.15.2

  1. $ conan inspect qt/5.15.2
  2. name: qt
  3. version: 5.15.2
  4. url: https://github.com/conan-io/conan-center-index
  5. ...
  6. options:
  7. commercial: [True, False]
  8. ...
  9. default_options:
  10. ...
  11. qt3d: False
  12. ...

此时,我们就可以通过[options]来打开这个选项

  1. [requires]
  2. qt/5.15.2
  3. [generators]
  4. cmake
  5. [options]
  6. qt:qt3d=True

conanfile.py

  1. from conans import ConanFile, CMake, tools
  2. class LibConan(ConanFile):
  3. requires = ["openscenegraph/3.6.5", "gdal/3.1.4", "libtiff/4.3.0"]
  4. generators = "cmake_find_package"
  5. def build(self):
  6. cmake = CMake(self) # it will find the packages by using our auto-generated FindXXX.cmake files
  7. cmake.configure()
  8. cmake.build()

命令

基础命令

  1. # 在默认的中心仓库中搜索 boost 软件包。在不指定-r的情况下,默认搜索本地缓存
  2. conan search boost* -r=conancenter
  3. # 检查包,查看此包的元数据。如conan inspect poco/1.9.4
  4. conan inspect <包名>/<版本>
  5. # 配置仓库,执行该命令会在当前目录生成conan的工程信息
  6. conan install <conanfile.txt所在的目录>
  7. # 编译缺少的二进制包(如果服务器没有找到此包,可以尝试编译)
  8. conan install <conanfile.txt所在的目录> --build=missing
  9. # 指定编译器和系统
  10. conan install <conanfile.txt所在的目录> --settings os="Linux" --settings compiler="gcc"
  11. # 指定编译类型(-s即-settings)
  12. conan install <conanfile.txt所在的目录> -s build_type=Debug
  13. # 指定配置,默认profile=default
  14. conan install <conanfile.txt所在的目录> --profile=gcc_x64
  15. #删除内容
  16. conan reme <包名>/<版本号>@[公司]/[渠道]
  17. # 查看工程信息(查看依赖项等等)
  18. conan info <conanfile.txt所在的目录>
  19. # 使用Dot或HTML格式生成依赖关系图
  20. 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

  1. <a name="mSuad"></a>
  2. ## 配置
  3. 它的配置以及本地的二进制仓库均存储在用户目录下`~/.conan/`中(Windows上,是`%USERPROFILE%\.conan\`)
  4. <a name="BfQQ3"></a>
  5. ### conan.conf
  6. 1. `path`存储目录
  7. 1. `download_cache`下载缓存目录
  8. ```powershell
  9. [storage]
  10. # This is the default path, but you can write your own. It must be an absolute path or a
  11. # path beginning with "~" (if the environment var CONAN_USER_HOME is specified, this directory, even
  12. # with "~/", will be relative to the conan user home, not to the system user home)
  13. path = E:\conan\data
  14. download_cache = E:\conan\download_cache

设置代理

  1. [proxies]
  2. http = http://dev-proxy.oa.com:8080
  3. https = http://dev-proxy.oa.com:8080

Profile

  1. [settings]
  2. os=Windows
  3. os_build=Windows
  4. arch=x86_64
  5. arch_build=x86_64
  6. compiler=Visual Studio
  7. compiler.version=17
  8. build_type=Release
  9. [options]
  10. [build_requires]
  11. [env]

Profile相关命令

  1. # 查看名为default的profile文件
  2. conan profile show default
  3. # 自动检测并生成默认配置
  4. conan profile new default --detect
  5. # Generates default profile detecting GCC and sets old ABI
  6. #修改默认配置的编译器设置
  7. conan profile update settings.compiler.libcxx=libstdc++11 default
  8. # Sets libcxx to C++11 ABI

相关介绍

软件包

名称/版本@用户/渠道

  • 渠道(Channel)用来描述是稳定版(Stable)还是测试版(Testing)等信息

举例:boost相关包名

  1. boost/1.64.0@conan/stable
  2. boost/1.65.1@conan/stable
  3. boost/1.66.0@conan/stable
  4. boost/1.67.0@conan/stable
  5. boost/1.68.0@conan/stable
  6. boost/1.69.0@conan/stable
  7. boost/1.70.0@conan/stable

软件包仓库

背景

  1. NodeJS 的包管理器 npm 会把依赖存储到工程目录的node_modules文件夹中,此外也能安装全局的包
  2. Python 的包管理器 pip 能把包装到用户目录下或者是全局环境中,所以一般配合 venv 使之把包装在工程中不污染环境

默认情况下 Conan 只把包装在用户目录下。
但Conan还提供了一个环境变量CONAN_USER_HOME来让用户指定一个 Conan 的工作目录

  • 这样就能起到类似于 Python 的 Virtual Environment 的作用

用户目录的软件包仓库被称为本地缓存(Local Cache)
那么同样的,服务器上也有一个软件包的仓库,文档中称为远端(Remote)

参考文章

  1. CONAN使用(二)—CONAN环境搭建
  2. conan安装、配置、使用