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

CMake中add_custom_command依赖文件列表转义问题如何解决

解决CMake add_custom_command依赖列表多余转义符问题

问题出在你用空格分隔的字符串存储依赖文件,而CMake的DEPENDS参数需要的是CMake原生列表(内部以分号分隔的元素集合)。当传递字符串时,CMake会把整个字符串当成单个依赖项,为处理其中的空格自动添加转义符,最终导致Make解析出错。

正确处理方式:用CMake列表构建依赖项

  1. 初始化空列表,替代原来的空字符串赋值:
set(MY_OBJECT_FILES) # 初始化空列表,无需赋值空字符串
  1. 用list(APPEND)逐个添加目标文件到列表:
foreach(config ${CONFIGURATIONS})
  list(APPEND MY_OBJECT_FILES "${CMAKE_CURRENT_BINARY_DIR}/generated-file-${config}.o")
endforeach()
  1. add_custom_command保持原有写法即可:
add_custom_command(
  OUTPUT my_output.out
  COMMAND ${MY_TOOL} ${PARAMETERS}
  DEPENDS ${MY_OBJECT_FILES}
  VERBATIM)

原理说明

CMake列表是原生多元素集合,当在DEPENDS中展开${MY_OBJECT_FILES}时,CMake会自动将列表元素转换为多个独立的依赖项,生成的built.make中不会出现多余转义符,依赖行将变为:

my_output.out: /home/user/project/build/generated-file-config1.o /home/user/project/build/generated-file-config2.o /home/user/project/build/generated-file-config3.o

特殊情况处理(已有空格分隔字符串)

如果因场景限制必须从空格分隔字符串转换为列表,可通过以下命令拆分:

string(REPLACE " " ";" MY_OBJECT_FILES "${MY_OBJECT_FILES}")

但优先推荐直接用list(APPEND)构建列表,避免字符串拼接带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:01:08