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

如何修复CMake重复目标问题?安装gr-matchstiq遇CMP0002错误

解决gr-matchstiq安装时的CMake CMP0002及Python3适配问题

问题根源分析

你遇到的两个错误存在关联:

  1. Python3 TypeError:Python3中hashlib.md5()要求传入字节串而非字符串,导致脚本执行失败,无法生成唯一的CMake目标名。
  2. CMake CMP0002错误:由于目标名生成失败,add_custom_target被错误调用为add_custom_target(ALL ALL ...),试图创建重复的ALL目标(CMake默认已存在该目标),触发CMP0002策略报错。

修复步骤

1. 修复Python3 hash编码问题

找到cmake/Modules/GrPython.cmake中的GR_UNIQUE_TARGET函数,修改其中的Python代码,为字符串添加编码:

原代码片段:

execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)

修改为:

execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
unique = hashlib.md5('${reldir}${ARGN}'.encode('utf-8')).hexdigest()[:5]
print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)

2. 保留已完成的Python3 print语法适配

你已经为print语句添加了括号,这部分无需修改,确保Python3兼容性。

对三种修复方案的评估

  • 方案1(ALLOW_DUPLICATE_TARGETS):无效。一是该属性仅支持CMake 3.15+;二是未解决Python脚本报错的根源,即便允许重复目标,仍会因目标名生成失败导致异常。
  • 方案2(修改ALL为ALL_PY):不可取。ALL是CMake的特殊默认目标,所有默认构建任务都依赖它,修改后自定义生成任务不会在默认构建中执行,导致安装缺少必要文件。
  • 方案3(修改GR_UNIQUE_TARGET函数):正确方向,但核心是修复其中的Python3编码问题,而非修改ALL属性。按上述步骤调整后,函数会生成唯一的目标名,彻底避免CMP0002冲突。

验证修复

修改完成后,重新执行:

cmake -Wno-dev ../

此时应该不会再出现TypeError和CMP0002错误,可继续完成后续构建安装步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:04:52