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

如何通过Python postbuild脚本访问CMakeLists.txt中的CMake变量?

实现方法

方法1:将CMake变量写入配置文件,Python读取

CMake可以在构建过程中生成包含变量信息的配置文件(比如JSON、INI格式),Python脚本读取该文件即可获取变量值。

示例步骤:

  • 在CMakeLists.txt中添加代码,导出变量到JSON文件并调用Python脚本:
# 生成JSON配置文件,写入需要的CMake变量
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cmake_vars.json" "{
    \"CMAKE_PROJECT_NAME\": \"${CMAKE_PROJECT_NAME}\",
    \"CMAKE_BUILD_TYPE\": \"${CMAKE_BUILD_TYPE}\",
    \"CMAKE_INSTALL_PREFIX\": \"${CMAKE_INSTALL_PREFIX}\"
}")

# 配置postbuild步骤,执行Python脚本
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/postbuild.py" "${CMAKE_CURRENT_BINARY_DIR}/cmake_vars.json"
)
  • 对应的Python脚本(postbuild.py)读取配置文件:
import json
import sys

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("请传入配置文件路径")
        sys.exit(1)
    config_path = sys.argv[1]
    with open(config_path, 'r') as f:
        cmake_vars = json.load(f)
    
    print("CMake项目名称:", cmake_vars["CMAKE_PROJECT_NAME"])
    print("构建类型:", cmake_vars["CMAKE_BUILD_TYPE"])
    # 此处可添加变量的后续处理逻辑

方法2:直接将CMake变量作为命令行参数传给Python脚本

如果需要传递的变量数量不多,可以直接在CMake的postbuild命令中把变量作为参数传递,Python通过sys.argv或参数解析库获取值。

示例:

  • CMakeLists.txt中的配置:
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/postbuild.py"
        --project-name "${CMAKE_PROJECT_NAME}"
        --build-type "${CMAKE_BUILD_TYPE}"
        --install-prefix "${CMAKE_INSTALL_PREFIX}"
)
  • Python脚本处理命令行参数:
import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Postbuild处理脚本')
    parser.add_argument('--project-name', required=True, help='CMake项目名称')
    parser.add_argument('--build-type', required=True, help='CMake构建类型')
    parser.add_argument('--install-prefix', required=True, help='CMake安装路径前缀')
    args = parser.parse_args()
    
    print("项目名称:", args.project_name)
    print("构建类型:", args.build_type)
    # 后续业务逻辑处理

方法3:使用CMake的configure_file生成Python模块

利用CMake的configure_file功能,将模板Python文件中的占位符替换为实际CMake变量值,生成可直接运行的Python脚本。

示例:

  • 创建模板文件postbuild_template.py.in:
# 此文件由CMake自动生成,请勿手动修改
CMAKE_PROJECT_NAME = "@CMAKE_PROJECT_NAME@"
CMAKE_BUILD_TYPE = "@CMAKE_BUILD_TYPE@"
CMAKE_INSTALL_PREFIX = "@CMAKE_INSTALL_PREFIX@"

if __name__ == "__main__":
    print("项目名称:", CMAKE_PROJECT_NAME)
    print("构建类型:", CMAKE_BUILD_TYPE)
    # 添加自定义处理逻辑
  • 在CMakeLists.txt中配置生成脚本并调用:
# 替换模板中的占位符,生成实际的Python脚本
configure_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/postbuild_template.py.in"
    "${CMAKE_CURRENT_BINARY_DIR}/postbuild.py"
    @ONLY
)

# 配置postbuild步骤执行生成好的脚本
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/postbuild.py"
)

内容的提问来源于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.12 11:55:46