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

如何将CMakeLists.txt中的变量传递给Python脚本并访问?

传递CMake变量到Python脚本的方法

下面是几种实用的方案,帮你把CMake中定义的sourcefilelist变量传递到Python脚本中:

方案1:生成Python配置文件

通过CMake的configure_file工具,把CMake变量注入到Python模板文件中,生成可直接导入的Python配置文件。

步骤:

  1. 在CMakeLists.txt中添加配置逻辑:
# 将CMake列表转为Python列表格式(处理字符串转义)
string(JOIN "\", \"" PY_SRC_FILES "${sourcefilelist}")
set(PY_SRC_FILES_LIST "[\"${PY_SRC_FILES}\"]")

# 生成Python配置文件
configure_file(
    ${CMAKE_SOURCE_DIR}/config_template.py.in
    ${CMAKE_BINARY_DIR}/generated_config.py
    @ONLY
)
  1. 创建模板文件config_template.py.in:
# 自动生成的配置文件,请勿手动修改
sourcefilelist = @PY_SRC_FILES_LIST@
  1. 在Python脚本中导入使用:
from generated_config import sourcefilelist

# 直接使用sourcefilelist变量
for file_path in sourcefilelist:
    print(file_path)

方案2:通过命令行参数传递

如果只是临时调用Python脚本,直接把变量作为命令行参数传递是最直接的方式。

步骤:

  1. 在CMakeLists.txt中调用Python脚本时传递参数:
# 调用Python脚本并传入sourcefilelist中的所有文件
execute_process(
    COMMAND ${Python_EXECUTABLE} ${CMAKE_SOURCE_DIR}/your_script.py ${sourcefilelist}
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    RESULT_VARIABLE PY_SCRIPT_EXIT_CODE
)
  1. 在Python脚本中通过sys.argv获取参数:
import sys

# 脚本路径本身是sys.argv[0],后续元素就是传递的文件列表
sourcefilelist = sys.argv[1:]

# 验证输出
print("Received files:", sourcefilelist)

方案3:生成通用配置文件(如JSON)

如果需要传递多个复杂变量,生成JSON这类通用格式的配置文件更易维护。

步骤:

  1. 在CMakeLists.txt中生成JSON文件:
# 初始化JSON内容
file(WRITE ${CMAKE_BINARY_DIR}/source_files.json "{\"sourcefilelist\": [")

# 遍历文件列表写入JSON,转义特殊字符
foreach(file ${sourcefilelist})
    string(REPLACE "\\" "\\\\" ESCAPED_FILE "${file}")
    file(APPEND ${CMAKE_BINARY_DIR}/source_files.json "\"${ESCAPED_FILE}\",")
endforeach()

# 移除最后一个逗号并补全JSON结构
file(READ ${CMAKE_BINARY_DIR}/source_files.json JSON_CONTENT)
string(REGEX REPLACE ",\\]$" "]}" JSON_CONTENT "${JSON_CONTENT}")
file(WRITE ${CMAKE_BINARY_DIR}/source_files.json "${JSON_CONTENT}")
  1. 在Python脚本中读取JSON:
import json

with open('source_files.json', 'r', encoding='utf-8') as f:
    config_data = json.load(f)

sourcefilelist = config_data['sourcefilelist']

注意事项

  • 处理路径时优先使用CMake提供的绝对路径变量(如CMAKE_CURRENT_SOURCE_DIR、CMAKE_BINARY_DIR),避免相对路径在不同环境下出错。
  • 如果sourcefilelist包含空元素或特殊字符,需要在CMake中提前做清理或转义处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:30:44