C/C++ 包管理器 Conan 安装及使用


在这里插入图片描述

Github

官网

文档

简介

Conan 是一个开源的、跨平台的 C/C++ 包管理器,旨在简化和改善 C/C++ 项目中的依赖项管理。它允许开发者定义、跟踪和分发项目所依赖的库和工具,从而简化构建和部署过程。Conan 支持多种构建系统,并能够与不同的构建工具集成。

安装 Conan 包管理器

# Mac 环境安装
brew install conan
# Python 方式安装
pip install --upgrade pip
pip install --user conan
pip install conan --upgrade
  • 安装完后需要重启终端,再执行命令
conan -v
conan -h

Conan 私有存储库

  • Conan Server是一款免费的开源服务器,可实现 Conan 远程存储库。
pip install conan-server
  • 启动 conan 存储库
conan_server

在这里插入图片描述

  • 用户目录下生成 .conan_server 目录
cd ~/.conan_server

在这里插入图片描述

注: 配置用户 [users] 及写权限 [write_permissions]

vim ~/.conan_server/server.conf

在这里插入图片描述

创建 profile 文件

注: profile 文件定义了构建和运行时所需的环境设置,确保了不同机器和环境之间的一致性。

# 生成名称为 default 的 profile 文件
conan profile detect
# 强制生成名称为 default 的 profile 文件,会覆盖旧文件
conan profile detect --force
conan profile detect --name <名称>

# 查看 profile 文件所在目录
conan profile path <名称>

# 列出所有 profile 文件
conan profile list
  • profile 文件
# 目标系统配置
[settings]
arch=x86_64
build_type=Release
compiler=apple-clang
compiler.cppstd=gnu17
compiler.libcxx=libc++
compiler.version=15
os=Macos

添加远程存储库

# 列出所有远程库
conan remote list
# 添加
conan remote add local_conan http://localhost:9300
# 删除
conan remote remove local_conan

在这里插入图片描述

  • 登录 local_conan 存储库
conan remote login local_conan demo -p demo

在这里插入图片描述

Conan 操作命令

  • conan 官方中央仓库
# 搜索 zlib 库
conan search 'zlib*' -r=conancenter
# 下载 zlib/1.3.1 库
conan download 'zlib/1.3.1' -r=conancenter
  • 上传 zlib/1.3.1 到 local_conan 私有存储库
conan upload 'zlib/1.3.1' -r=local_conan

在这里插入图片描述

  • 搜索 local_conan 私有存储库
conan search '*' -r=local_conan

在这里插入图片描述

  • 从 local_conan 私有存储库下载 zlib/1.3.1
conan download 'zlib/1.3.1' -r=local_conan

在这里插入图片描述

  • 删除本地 zlib/1.3.1
conan remove 'zlib/1.3.1' -c

在这里插入图片描述

  • 删除远程私库 zlib/1.3.1
conan remove 'zlib/1.3.1' -r=local_conan -c
# 清空远程私库
conan remove '*' -r=local_conan -c

在这里插入图片描述

  • 从 local_conan 私有存储库安装 zlib/1.3.1
conan install --requires='zlib/1.3.1' -r=local_conan
  • 检查本地计算机上的包是否存在
conan list '*'
conan list 'zlib'

在这里插入图片描述

  • conanfile.txt(Conan 配置文件,用于定义项目的依赖项和生成器)
conan search 'cmake*' -r=conancenter

当前搜索到 cmake 最新版本是 cmake/3.30.1

[requires]
zlib/1.3.1

[tool_requires]
cmake/3.30.1

[generators]
CMakeDeps
CMakeToolchain
  • 以下两行命令是等价的。
conan install . --output-folder=build --build=missing --profile=myProfile
conan install . --output-folder=build --build=missing --profile:host=myProfile --profile:build=default

在这里插入图片描述

注: –profile:host 构建二进制文件运行平台的配置文件【目标运行环境】;–profile:build 构建二进制文件的平台的配置文件【当前开发环境】。

  • 设置 zlib/1.3.1 静态链接到 shared=True 共享链接。
conan install . --output-folder=build --build=missing --options=zlib/1.3.1:shared=True

创建 Conan 包

conan new -h 

在这里插入图片描述

  • 创建一个 hello/1.0 C++ 库示例项目
# 用于 CMake 的库项目模板,适合 C++ 库的开发
conan new cmake_lib -d name=hello -d version=1.0
# Conan 基础模板,适用于任何项目,不依赖特定构建系统
conan new basic -d name=hello -d version=1.0

在这里插入图片描述

  • Conan 包项目结构
.
├── CMakeLists.txt
├── conanfile.py
├── include
│   └── hello.h
├── src
│   └── hello.cpp
└── test_package
    ├── CMakeLists.txt
    ├── conanfile.py
    └── src
        └── example.cpp
  • 构建包
# 根据当前目录下的 Conan 配方创建一个包。它会使用缓存中的预构建二进制文件,如果依赖项缺失,会尝试从远程库中获取并构建这些依赖项。
conan create .
# 强制从源代码构建所有缺失的依赖项,而不是使用缓存中的预构建版本
# -tf="" will skip ng the test_package
conan create . --build=missing -tf=""

在这里插入图片描述

  • 验证包二进制文件是否在缓存中
conan list hello
# 以调试模式构建包
conan create . -s build_type=Debug
# 构建共享库(动态链接库)而不是静态库
conan create . -o hello/1.0:shared=True
  • 列出缓存中为 hello/1.0 包构建的所有二进制文件
conan list "hello/1.0:*"
  • 使用 test_package 目录中的测试来验证 hello/1.0 包
conan test test_package hello/1.0

在这里插入图片描述

  • Release和Debug配置构建我们的包并检查生成的二进制包 ID
# -tf="" will skip ng the test_package
conan create . --build=missing -s build_type=Debug -tf=""
conan create . --build=missing -s build_type=Release -tf=""
# 强制构建所有缺失的依赖,设置为共享库,并确保生成的位置无关代码
conan create . --build=missing -o shared=True -o fPIC=True -tf=""
# 强制构建缺失的依赖,并且在构建过程中不生成位置无关代码。
conan create . --build=missing -o shared=True -o fPIC=False -tf=""

Artifactory 私有存储库

下载安装包(推荐)

在这里插入图片描述

Docker 方式安装

docker pull releases-docker.jfrog.io/jfrog/artifactory-cpp-ce:7.63.12
docker run --name artifactory -d -p 8081:8081 -p 8082:8082 releases-docker.jfrog.io/jfrog/artifactory-cpp-ce:7.63.12

Conan 官方示例

git clone https://github.com/conan-io/examples2.git
cd examples2/tutorial/consuming_packages/simple_cmake_project
  • 目录结构
.
├── ci_test_example.sh
├── CMakeLists.txt
├── conanfile.txt
└── src
    └── main.c
  • CMakeLists.txt(CMake 配置文件)
# 指定 CMake 的最低版本要求
# 这里设置 CMake 版本要求为 3.15 或更高
cmake_minimum_required(VERSION 3.15)

# 定义项目名称和语言
# 这里定义了项目名称为 "compressor" 并且使用 C 语言
project(compressor C)

# 查找并引入 ZLIB 库
# REQUIRED 表示如果未找到 ZLIB 库,则 CMake 配置过程会失败
find_package(ZLIB REQUIRED)

# 添加可执行文件
# - ${PROJECT_NAME} 是一个变量,等于项目名称 "compressor"
# - src/main.c 是源文件的位置
add_executable(${PROJECT_NAME} src/main.c)

# 将 ZLIB 库链接到可执行文件
# - ${PROJECT_NAME} 是可执行文件的名称
# - ZLIB::ZLIB 是 CMake 的目标名称,用于链接 ZLIB 库
target_link_libraries(${PROJECT_NAME} ZLIB::ZLIB)
  • conanfile.txt(Conan 配置文件,用于定义项目的依赖项和生成器)
# 依赖列表
[requires]
# 指定项目所需的依赖包及其版本
zlib/1.2.11  # 需要 zlib 库,版本为 1.2.11

# 生成器列表
[generators]
# 使用 CMakeDeps 生成 CMake 的依赖文件
# CMakeDeps 生成用于 CMake 的依赖文件,使 CMake 能够找到并使用 Conan 安装的依赖
CMakeDeps

# 使用 CMakeToolchain 生成 CMake 的工具链文件
# CMakeToolchain 生成用于 CMake 的工具链文件,配置 CMake 项目以使用 Conan 管理的工具链
CMakeToolchain
conan install . --output-folder=build --build=missing
  • ci_test_example.sh
#!/bin/bash

# 如果有任何命令失败,则立即退出
set -e

# 在执行每个命令之前打印命令
set -x

# 获取当前脚本所在的目录
BASEDIR=$(dirname "$0")

# 切换到脚本所在的目录
pushd "$BASEDIR"

# 删除名为 'build' 的目录及其所有内容
rm -rf build

# 使用 Conan 包管理器安装依赖项
# - --output-folder=build 指定安装包的位置
# - --build=missing 会从源代码构建缺失的依赖项
conan install . --output-folder=build --build=missing

# 切换到 'build' 目录,在这里 CMake 会生成构建文件
cd build

# 使用 CMake 配置项目
# - .. 指向上一级目录,即源代码所在的目录
# - -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake 指定 Conan 的工具链文件
# - -DCMAKE_BUILD_TYPE=Release 设置构建类型为 Release
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release

# 构建项目
cmake --build .

# 运行构建生成的可执行文件 'compressor'
./compressor
./ci_test_example.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逢生博客

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值