You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对不同操作系统/编译器版本选择Conan打包库版本?

根据操作系统/编译器版本动态选择Conan依赖版本的方案

针对跨环境下sqlite3版本冲突的问题,你可以通过以下几种方式实现依赖版本的动态适配:

1. 使用conanfile.py实现逻辑判断(推荐)

将原来的conanfile.txt替换为conanfile.py,利用Python代码根据操作系统、编译器版本动态指定依赖版本,这是最灵活的方案。

示例代码:

from conans import ConanFile
import subprocess

class MyProjectConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"

    def requirements(self):
        # 固定依赖
        self.requires("boost/1.79.0")
        self.requires("oatpp/1.3.0")
        self.requires("oatpp-sqlite/1.3.0")

        # 根据Ubuntu版本选择sqlite3
        if self.settings.os == "Linux":
            try:
                # 获取Ubuntu发行版版本号
                release_info = subprocess.run(
                    ["lsb_release", "-rs"], 
                    capture_output=True, 
                    text=True, 
                    check=True
                )
                ubuntu_ver = release_info.stdout.strip()
                if ubuntu_ver == "24.04":
                    self.requires("sqlite3/3.45.0")
                elif ubuntu_ver == "22.04":
                    self.requires("sqlite3/3.39.4")
            except (subprocess.CalledProcessError, FileNotFoundError):
                #  fallback到兼容版本
                self.requires("sqlite3/3.39.4")
        
        # 也可以根据编译器版本判断(比如gcc 13对应高版本sqlite3)
        # if self.settings.compiler == "gcc":
        #     if self.settings.compiler.version >= "13":
        #         self.requires("sqlite3/3.45.0")
        #     else:
        #         self.requires("sqlite3/3.39.4")

使用时直接运行conan install .即可,脚本会自动根据当前环境选择对应版本。

2. 利用Conan Profile做环境隔离

为不同环境创建独立的Profile文件,通过Profile指定特定环境下的依赖版本,无需修改项目配置文件。

创建Profile文件

  • 针对Ubuntu 24.04(gcc 13),创建ubuntu2404.profile:
[settings]
os=Linux
os_version=24.04
compiler=gcc
compiler.version=13
compiler.libcxx=libstdc++11

[requires]
sqlite3/3.45.0
  • 针对Ubuntu 22.04(gcc 11),创建ubuntu2204.profile:
[settings]
os=Linux
os_version=22.04
compiler=gcc
compiler.version=11
compiler.libcxx=libstdc++11

[requires]
sqlite3/3.39.4

构建时指定Profile

在对应环境下运行:

# Ubuntu 24.04
conan install . --profile=ubuntu2404.profile

# Ubuntu 22.04
conan install . --profile=ubuntu2204.profile

这种方式适合多环境协作,每个开发者只需使用对应环境的Profile即可。

3. 全局版本覆盖(不推荐)

通过Conan全局配置强制指定sqlite3版本,但该设置会影响所有本地Conan项目,容易引发其他依赖冲突,仅作为临时应急方案。

  • 在Ubuntu 24.04上执行:
conan config set conf.requires.sqlite3=sqlite3/3.45.0
  • 在Ubuntu 22.04上执行:
conan config set conf.requires.sqlite3=sqlite3/3.39.4

如需取消全局设置,运行:

conan config rm conf.requires.sqlite3

内容的提问来源于stack exchange,提问作者bobeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:13:13