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

如何从CMake向conanfile.py传递变量并在package方法中访问?

从CMake向Conan的package方法传递变量的实现方案

有两种可靠的方式可以实现这个需求,具体如下:

方法一:通过CMake缓存变量直接读取(推荐)

如果要传递的值是CMake中的缓存变量(通过CACHE关键字定义),可以直接在Conan的build方法中读取该变量,并存储到self对象的属性中,供package方法使用。

步骤1:在CMakeLists.txt中定义缓存变量

# 定义需要传递的缓存变量,INTERNAL表示仅内部使用,不暴露给用户
set(MY_CUSTOM_VAR "my_target_value" CACHE INTERNAL "Variable to pass to Conan")

步骤2:在conanfile.py的build方法中读取并保存变量

from conans import ConanFile, CMake

class MyPackageConan(ConanFile):
    name = "my_package"
    version = "1.0.0"

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        # 读取CMake缓存中的变量
        self.my_custom_var = cmake.get_variable("MY_CUSTOM_VAR")
        cmake.build()

    def package(self):
        # 在package方法中直接访问存储的变量
        self.output.info(f"Received value from CMake: {self.my_custom_var}")
        # 执行打包逻辑...

方法二:通过生成中间文件传递(适用于复杂或动态生成的值)

如果要传递的值是动态生成的,或者需要传递多个变量,可以让CMake生成一个包含变量内容的文件(如JSON、文本文件),再在Conan中读取该文件并解析。

步骤1:在CMakeLists.txt中生成变量文件

# 生成JSON格式的变量文件,方便Python解析
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conan_vars.json" 
     "{\"LIB_VERSION\": \"1.2.3\", \"BUILD_TYPE\": \"${CMAKE_BUILD_TYPE}\"}")

步骤2:在conanfile.py中读取文件并保存变量

from conans import ConanFile, CMake
import json

class MyPackageConan(ConanFile):
    name = "my_package"
    version = "1.0.0"

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()
        
        # 读取CMake生成的JSON文件
        var_file = f"{self.build_folder}/conan_vars.json"
        with open(var_file, "r") as f:
            self.conan_vars = json.load(f)

    def package(self):
        # 访问传递过来的变量
        self.output.info(f"Library version: {self.conan_vars['LIB_VERSION']}")
        self.output.info(f"Build type: {self.conan_vars['BUILD_TYPE']}")
        # 执行打包逻辑...

注意事项

  • 确保CMake中写入文件的路径和Conan中读取的路径一致,CMAKE_CURRENT_BINARY_DIR对应Conan中的self.build_folder。
  • 如果使用文本文件传递单个变量,可直接按键值对格式写入,Python读取后拆分即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:32:46