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

CMake自定义命令执行echo时为何尝试执行目标对象文件?

问题原因与解决方法

出错原因

$<TARGET_OBJECTS:MyLib>这个生成器表达式展开后,得到的是空格分隔的目标对象文件路径列表,并非逗号分隔格式。

你当前的add_custom_command未添加VERBATIM选项,CMake生成构建脚本时不会对展开后的空格做转义处理。当bash执行命令时,会把第一个.o文件之后的内容当成独立命令去执行,而.o文件没有可执行权限,因此触发权限拒绝错误,导致构建失败。

而add_custom_target搭配VERBATIM使用时,CMake会自动转义空格与特殊字符,将整个对象列表作为完整参数传递给bash,所以能正常输出。

解决方法

给add_custom_command添加VERBATIM选项即可,修改后的代码如下:

add_custom_command(TARGET MyLib
  PRE_LINK
  COMMAND bash -c "echo 'command Objects: $<TARGET_OBJECTS:MyLib>'"
  VERBATIM)

添加VERBATIM后,CMake会正确处理展开后的空格,确保整个对象列表被作为echo命令的参数,而非被拆分为多个独立命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:22:32