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

CMake+Ninja构建LLVM时/manifest:no未生效,mt.exe报错求助

问题原因分析
  1. LLVM特殊目标的配置覆盖:当启用LLVM_OPTIMIZED_TABLEGEN=ON时,LLVM会为llvm-tblgen单独生成优化构建规则,这部分规则可能硬编码了链接参数,覆盖了你设置的全局CMAKE_EXE_LINKER_FLAGS。即使build.ninja中显示了/manifest:no,实际执行时也可能被LLVM的自定义CMake逻辑替换。
  2. CMake的manifest后处理步骤:/manifest:no仅告知链接器不生成manifest文件,但CMake可能存在独立的后续步骤(比如自动添加系统运行时依赖的manifest),这会触发mt.exe单独处理manifest,和链接器的标志无关。
解决方法

方法一:彻底禁用CMake的manifest处理

在CMake配置命令中添加额外变量,从根源上阻止CMake调用mt.exe:

cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=d:\buildbot-worker\worker\llvm-dev-nvptx-win/install -DLLVM_ENABLE_PROJECTS=llvm -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_LIT_ARGS=-vv -DLLVM_TARGETS_TO_BUILD=X86;NVPTX -DLLVM_DEFAULT_TARGET_TRIPLE=nvptx-nvidia-cuda -DLLVM_OPTIMIZED_TABLEGEN=ON -DCMAKE_EXE_LINKER_FLAGS=/manifest:no -DCMAKE_MODULE_LINKER_FLAGS=/manifest:no -DCMAKE_SHARED_LINKER_FLAGS=/manifest:no -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=OFF -DCMAKE_INSTALL_UCRT_LIBRARIES=OFF -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE -Wno-dev d:\buildbot-worker\worker\llvm-dev-nvptx-win/llvm

方法二:针对llvm-tblgen目标强制设置链接标志

修改LLVM源码中的CMake配置文件,确保llvm-tblgen目标使用/manifest:no:

  1. 打开llvm/utils/TableGen/CMakeLists.txt
  2. 在add_executable(llvm-tblgen ...)语句之后,添加:
target_link_options(llvm-tblgen PRIVATE /MANIFEST:NO)
  1. 重新运行CMake配置并构建。

方法三:临时规避文件占用问题

如果只是mt.exe因文件被占用报错,可尝试:

  • 关闭所有可能占用llvm-tblgen.exe的进程(比如之前构建残留的后台进程)
  • 清理build目录后重新执行CMake配置和构建
  • 使用单线程构建:ninja -j1,避免并行构建时的文件竞争

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:43:17