Closed
[Installation]:构建命令问题:Unknown argument --target=mindspeed_ops_C #72
kkkk_123Add on  Sep 15Closed at  Sep 29
kkkk_123
Sep 15 Create

在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。

环境信息

例如:
- 操作系统  openEuler 22.03 (LTS-SP4)
- 昇腾硬件信息   910B
- CANN软件版本  9.1.0
- 安装的对应软件版本  python3.12  mindspeed_ops-26.2.0

您是如何安装操作的

git clone https://gitcode.com/ascend/MindSpeed-Ops.git
cd MindSpeed-Ops/
pip install -e . --no-build-isolation --no-deps
cd ..

报错信息如下:
Unknown argument --target=mindspeed_ops_C
Usage: cmake --build

[options] [-- [native-options]]
Options:
= Project binary directory to be built.
--parallel [], -j []
= Build in parallel using the given number of jobs.
If is omitted the native build tool's
default number is used.
The CMAKE_BUILD_PARALLEL_LEVEL environment variable
specifies a default parallel level when this option
is not given.
--target ..., -t ...
= Build instead of default targets.
--config = For multi-configuration tools, choose .
--clean-first = Build target 'clean' first, then build.
(To clean only, use --target 'clean'.)
--verbose, -v = Enable verbose output - if supported - including
the build commands to be executed.
-- = Pass remaining options to the native tool.
Traceback (most recent call last):
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 389, in
main()
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 373, in main
json_out["return_val"] = hook(**hook_input["kwargs"])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 303, in build_editable
return hook(wheel_directory, config_settings, metadata_directory)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/build_meta.py", line 474, in build_editable
return self._build_with_temp_dir(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/build_meta.py", line 410, in _build_with_temp_dir
self.run_setup()
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/build_meta.py", line 317, in run_setup
exec(code, locals()) # noqa: S102 # exec is intentional here
^^^^^^^^^^^^^^^^^^^^
File "", line 432, in
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/init.py", line 117, in setup
return distutils.core.setup(**attrs) # type: ignore[return-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 168, in setup
return run_commands(dist)
^^^^^^^^^^^^^^^^^^
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 184, in run_commands
dist.run_commands()
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 1028, in run_commands
self.run_command(cmd)
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/dist.py", line 1106, in run_command
super().run_command(command)
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 1047, in run_command
cmd_obj.run()
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/command/editable_wheel.py", line 142, in run
self._create_wheel_file(bdist_wheel)
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/command/editable_wheel.py", line 352, in _create_wheel_file
files, mapping = self._run_build_commands(dist_name, unpacked, lib, tmp)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/command/editable_wheel.py", line 275, in _run_build_commands
self._run_build_subcommands()
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/command/editable_wheel.py", line 302, in _run_build_subcommands
self.run_command(name)
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 342, in run_command
self.distribution.run_command(command)
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/dist.py", line 1106, in run_command
super().run_command(command)
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 1047, in run_command
cmd_obj.run()
File "", line 356, in run
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/command/build_ext.py", line 95, in run
_build_ext.run(self)
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 382, in run
self.build_extensions()
File "", line 325, in build_extensions
File "/home/miniconda3/envs/yxt_qwen35/lib/python3.12/subprocess.py", line 413, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/local/bin/cmake', '--build', '.', '-j', '384', '--target=mindspeed_ops_C']' returned non-zero exit status 1.
An error occurred when building editable wheel for mindspeed_ops.
See debugging tips in: https://setuptools.pypa.io/en/latest/userguide/development_mode.html#debugging-tips
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building editable for mindspeed_ops
Failed to build mindspeed_ops
error: failed-wheel-build-for-install

× Failed to build installable wheels for some pyproject.toml based projects
╰─> mindspeed_ops

AI分析如下:

调用者是 Python 的 subprocess.check_call,位于 setup.py 第 325 行附近的 build_extensions() 方法里。

命令列表是硬编码或拼接出来的,其中 '--target=mindspeed_ops_C' 是作为一个完整的字符串放进去的,而不是分成 '--target', 'mindspeed_ops_C' 两个元素。

-j 384 这个并行度也说明是脚本里写死的(384 核),进一步证实是项目自己的构建逻辑。

我临时规避方法:
把这行:
*[f"--target={name}" for name in targets],
改成:
*[arg for name in targets for arg in ("--target", name)],

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
xmzCollaborators
Sep 15 Comments:

已在蓝区复现该问题,预计9月15日解决

likedislike
XxmzCollaborators
Sep 28 Associated pull request
xmzCollaborators
Sep 28 Comments:

已定位根因并提交修复 PR:#187(fix: pass cmake --build targets as separate arguments)。

根因:setup.py 拼 cmake --build 命令时把构建目标写成了单个 --target=<name> token(master 上位于 setup.py:322):

*[f"--target={name}" for name in targets],

而 cmake --build 只接受「目标名为独立 argv」的形式(--target <tgt>... / -t <tgt>...)。实测会被拒绝的版本:3.13.4、3.16.8、3.17.3、3.18.x、3.20.3~3.20.5(报 Unknown argument --target=mindspeed_ops_C,3.20.3+ 报 '--target=mindspeed_ops_C' is invalid syntax for --target);3.21.0 及以后才兼容 = 写法。失败发生在任何编译单元开始之前,所以现场只看到 configure 成功随后立刻报错。

合入前的规避(任选其一):

  1. 把 CMake 升到 ≥ 3.21;
  2. 在本地把上述那一行改成 *["--target", *targets],(即 --target 与目标名分成两个 argv)。

验证:在 CMake 3.16.8 环境下做了同一份代码的端到端 A/B —— 修复前 0 个编译单元即失败并抛 CalledProcessError;修复后 [100%] Built target mindspeed_ops_C 并正常产出 .so。

likedislike
ascend-robotascend-robotCollaborators
Sep 29 Close issue
ascend-robotascend-robotCollaborators
Sep 29 changed custom state from TODO to DONE
ascend-robotascend-robotCollaborators
Sep 29 Added label: resolved