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

Windows下CMake用Unix Makefiles编译时路径错误问题求助

解决Windows下MSYS UCRT64 + CMake Unix Makefiles二次make报错问题

在Windows环境下使用MSYS UCRT64、VSCode和CMake的Unix Makefiles生成器构建C项目时,首次编译正常,但修改代码后二次执行make命令会出现src/lib/CMakeFiles/libhangman.dir/compiler_depend.make:4: *** multiple target patterns. Stop.错误,原因是生成的makefile中混入了Windows格式绝对路径(如C:/...),导致GNU Make解析时将冒号识别为目标分隔符引发冲突。

以下是具体解决方案:

  • 强制在MSYS UCRT64 Shell中执行构建命令
    不要在Windows原生CMD或PowerShell中运行CMake和make,必须打开MSYS UCRT64的终端窗口,进入项目build目录执行命令。MSYS会自动将Windows路径转换为Unix风格(如/c/...),避免make解析路径出错。

  • 修改CMake配置,生成Unix风格路径
    在项目根目录的CMakeLists.txt最开头添加以下配置,强制CMake使用相对路径或Unix风格绝对路径:

    # 生成相对路径,避免硬编码Windows绝对路径
    set(CMAKE_USE_RELATIVE_PATHS ON)
    # 跳过安装依赖检查,减少路径相关生成逻辑
    set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY ON)
    

    同时,确保所有路径引用都使用CMake内置变量(如CMAKE_SOURCE_DIR、CMAKE_CURRENT_SOURCE_DIR),避免硬编码Windows路径。例如:

    # 推荐写法
    add_library(libhangman STATIC 
        ${CMAKE_CURRENT_SOURCE_DIR}/utils.c
        ${CMAKE_CURRENT_SOURCE_DIR}/game_logic.c
    )
    # 禁止硬编码Windows路径
    # add_library(libhangman STATIC C:/project/src/lib/utils.c)
    
  • 清理现有构建目录,重新生成Makefile
    进入build目录,清理旧的生成文件后重新运行CMake:

    rm -rf build/*
    cd build
    cmake -G "Unix Makefiles" ..
    

    这一步确保生成的Makefile完全使用MSYS环境下的Unix风格路径。

  • 配置VSCode使用MSYS Shell执行构建任务
    如果通过VSCode的构建任务执行make,需在.vscode/tasks.json中指定使用MSYS UCRT64的shell:

    {
      "version": "2.0.0",
      "tasks": [
        {
          "label": "build",
          "type": "shell",
          "command": "make",
          "args": [],
          "options": {
            "shell": {
              "executable": "C:/msys64/ucrt64.exe",
              "args": ["-c"]
            }
          },
          "group": {
            "kind": "build",
            "isDefault": true
          },
          "problemMatcher": ["$gcc"]
        }
      ]
    }
    

    替换executable路径为你本地MSYS UCRT64的安装路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 16:42:27