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

CMake 3.14中add_custom_command传递参数失效问题求助

解决CMake POST_BUILD调用Python脚本参数传递失败问题

问题分析

你遇到的问题是CMake 3.14中add_custom_command的POST_BUILD阶段调用Python脚本时,参数CMAKE_BINARY_DIR无法被Python脚本接收,导致sys.argv[1]索引越界。直接在CMD中调用正常,核心原因是路径或参数包含空格时未加引号,被Shell拆分导致参数丢失。

解决方案

修改CMake代码,给路径和参数添加双引号包裹,确保Shell将其作为单个参数解析:

修改后的CMake代码

set(arg ${CMAKE_BINARY_DIR})    
add_custom_command(TARGET res POST_BUILD
  COMMAND ${PYTHON_TEST} "${CMAKE_BINARY_DIR}/../script.py" "${arg}"
  DEPENDS ${arg}
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  COMMENT "Generating results"
)

更简洁的写法(利用工作目录简化路径)

因为WORKING_DIRECTORY已经设为CMAKE_BINARY_DIR,脚本路径可以直接写相对路径:

add_custom_command(TARGET res POST_BUILD
  COMMAND ${PYTHON_TEST} "../script.py" "${CMAKE_BINARY_DIR}"
  DEPENDS ${CMAKE_BINARY_DIR}
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  COMMENT "Generating results"
)

关键说明

  • 当路径或参数包含空格时,必须用双引号包裹,否则Shell会将空格视为参数分隔符,导致Python收到的参数不完整。
  • 可以通过VERBOSE构建验证实际执行的命令:
    • Makefile构建:执行make VERBOSE=1
    • Ninja构建:执行ninja -v
      查看输出中的Python命令,确认参数是否正确传递。

内容的提问来源于stack exchange,提问作者mr.Arrow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:42:41