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

制作Conan包时如何让CMake的find_package找到Conan提供的openssl?

实现方案

你可以通过Conan官方的CMake集成工具链来实现,具体操作步骤如下:

  • 首先在Conan配方中添加CMake相关生成器
    如果你使用的是Conan 2.x,直接在conanfile.py中声明两个生成器即可:

    from conan import ConanFile
    
    class YourProjectRecipe(ConanFile):
        # 其他配置如name、version、settings等
        generators = ["CMakeToolchain", "CMakeDeps"]
    
        def requirements(self):
            self.requires("openssl/[>=1.1.1 <4]")
            # 如果你的项目中find_package用的是全小写的openssl,添加下面一行配置
            self.requires["openssl"].set_property("cmake_find_package_name", "openssl")
    

    CMakeDeps会自动为所有声明的依赖生成对应的CMake Config配置文件,CMakeToolchain会生成适配Conan依赖路径的工具链文件,完美匹配项目中find_package的查找逻辑。

  • 在Conan配方的构建阶段使用官方CMake helper调用构建
    直接用Conan封装好的CMake工具即可自动传入工具链参数,不需要手动修改项目的CMake代码:

    from conan.tools.cmake import CMake
    
    # 在你的ConanFile类中添加build方法
    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()
    
  • 本地手动测试构建的特殊处理
    如果你需要脱离Conan直接手动运行CMake测试项目构建,只需要在configure阶段传入Conan生成的工具链文件即可:

    cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=./build/conan_toolchain.cmake
    

常见问题排查

如果仍然提示找不到openssl,优先检查两个点:

  • 确认你的项目中find_package的openssl大小写是否和Conan生成的配置文件名匹配,如果你没有修改cmake_find_package_name属性,默认生成的是首字母大写的OpenSSL配置,对应find_package(OpenSSL REQUIRED)
  • 如果项目源码中自带了FindOpenSSL.cmake模块,会优先走Module模式查找系统openssl,你可以在CMake配置时添加参数-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON,强制优先使用Conan生成的Config配置文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:15:02