欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > C/C++ 包管理器 Conan 安装及使用

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

2024/10/25 16:20:56 来源:https://blog.csdn.net/weixin_42607526/article/details/141611313  浏览:    关键词:C/C++ 包管理器 Conan 安装及使用

文章目录

  • Github
  • 官网
  • 文档
  • 简介
  • 安装 Conan 包管理器
  • Conan 私有存储库
    • 创建 profile 文件
    • 添加远程存储库
    • Conan 操作命令
  • 创建 Conan 包
  • Artifactory 私有存储库
    • 下载安装包(推荐)
    • Docker 方式安装
  • Conan 官方示例

在这里插入图片描述

Github

  • https://github.com/conan-io/conan

官网

  • https://conan.io/

文档

  • https://docs.conan.io/2/

简介

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

安装 Conan 包管理器

  • 下载:https://conan.io/downloads
# 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 包

  • https://docs.conan.io/2/tutorial/creating_packages/create_your_first_package.html
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 私有存储库

  • 下载:https://conan.io/downloads

下载安装包(推荐)

  • Linux下载(947M):https://releases.jfrog.io/artifactory/artifactory-rpms/jfrog-artifactory-cpp-ce/jfrog-artifactory-cpp-ce-7.63.12.rpm

在这里插入图片描述

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com