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

Conan 2.0不使用CMakeDeps时配置CMakeToolchain生成器的方法

在Conan 2.0中使用CMakeToolchain且不启用CMakeDeps的配置方案

核心思路

由于不启用CMakeDeps,Conan不会自动生成依赖包的CMake配置导入逻辑,因此需要手动通过CMakeToolchain向CMake的CMAKE_PREFIX_PATH变量添加Conan缓存(或可编辑包本地目录)中依赖包的安装前缀路径——CMake会自动在这些路径下搜索*-config.cmake或Find*.cmake文件。


针对Conan缓存包的配置步骤

以依赖say/0.1的hello包为例,在hello包的conanfile.py中修改generate方法,手动注入依赖包的缓存路径:

from conan import ConanFile
from conan.tools.cmake import CMakeToolchain
import os

class HelloConan(ConanFile):
    name = "hello"
    version = "0.1"
    requires = "say/0.1"
    settings = "os", "compiler", "build_type", "arch"

    def generate(self):
        tc = CMakeToolchain(self)
        # 收集所有依赖包的缓存路径
        prefix_paths = [dep.package_folder for dep in self.dependencies.values()]
        
        # 根据系统处理路径分隔符
        if self.settings.os == "Windows":
            tc.variables["CMAKE_PREFIX_PATH"] = ";".join(prefix_paths)
        else:
            tc.variables["CMAKE_PREFIX_PATH"] = ":".join(prefix_paths)
        
        tc.generate()

生成的toolchain文件会自动将所有依赖包的Conan缓存路径注入CMAKE_PREFIX_PATH,此时CMake执行find_package(say REQUIRED)时就能找到对应的say-config.cmake文件。


可编辑模式的处理

当依赖包处于可编辑模式时,dep.package_folder会指向本地开发目录而非Conan缓存,只需确保本地目录中存在正确的CMake配置文件,并根据实际情况调整路径:

def generate(self):
    tc = CMakeToolchain(self)
    prefix_paths = []
    
    for name, dep in self.dependencies.items():
        if dep.is_editable:
            # 假设可编辑包的配置文件在本地install目录下(需提前执行本地安装)
            editable_prefix = os.path.join(dep.source_folder, "install")
            prefix_paths.append(editable_prefix)
        else:
            prefix_paths.append(dep.package_folder)
    
    # 处理路径分隔符
    if self.settings.os == "Windows":
        tc.variables["CMAKE_PREFIX_PATH"] = ";".join(prefix_paths)
    else:
        tc.variables["CMAKE_PREFIX_PATH"] = ":".join(prefix_paths)
    
    tc.generate()

额外注意

  • 可编辑包需提前通过cmake --install将配置文件安装到指定的install目录,或者直接在本地开发目录根目录放置*-config.cmake文件;
  • 若依赖层级复杂,需确保遍历所有间接依赖并添加其路径。

内容的提问来源于stack exchange,提问作者schrödinbug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:17:20