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

Conan 2.x中使用build_requirements时如何让CMakeDeps生成对应依赖的.cmake配置文件?

Conan 2.x中使用build_requirements时如何让CMakeDeps生成对应依赖的.cmake配置文件?

这个问题我之前帮同事排查过,Conan 2.x对构建依赖(build_requirements)和运行时依赖(requirements)的生成器处理逻辑是不一样的,我来给你拆解原因和解决办法:

为什么默认不生成.cmake文件?

在Conan 2里,tool_requires 默认被归类为纯构建工具(比如cmake、ninja这类),这类依赖不需要暴露给你的项目CMake配置,所以CMakeDeps生成器默认不会为它们生成对应的Config.cmake文件。而之前的requires是运行时依赖,CMakeDeps会自动为其生成配置文件供find_package使用。

但像grpc、protobuf这类依赖,虽然你把它们放到了构建依赖里,但项目CMake脚本里依然需要通过find_package来调用它们的工具或链接库,这时候就需要显式告诉Conan:要为这些构建依赖生成CMake配置文件。

解决办法:给tool_requires添加generate=True参数

在你的build_requirements函数里,给需要生成配置文件的依赖加上generate=True选项,这样Conan就会触发CMakeDeps为这些包生成对应的.cmake配置文件。修改后的代码如下:

# Build level requirements
def build_requirements(self):
    print("[conanfily.py]: Defining build requirements")
    # 给需要find_package的依赖添加generate=True
    self.tool_requires("grpc/1.54.3", generate=True)
    self.tool_requires("protobuf/3.21.12", generate=True)
    # cmake作为纯构建工具,不需要生成配置文件,不用加
    self.tool_requires("cmake/3.28.1")

验证步骤

  1. 删掉之前生成的Conan缓存和构建目录,避免残留配置干扰
  2. 重新运行conan install命令
  3. 检查生成的CMake配置目录(通常是conan_install下的cmake文件夹),你会看到gRPCConfig.cmake、protobuf-config.cmake这些文件已经生成了
  4. 再次执行CMake构建,find_package就能正常找到依赖了

额外提示

如果你的项目里还有其他需要在CMake中引用的构建依赖,都需要给对应的tool_requires加上generate=True。而像cmake、ninja这类纯构建工具,完全不需要在CMake里find_package,就不用加这个参数,保持默认即可。

备注:内容来源于stack exchange,提问作者Loop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:00:26