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

Windows下适配非PATH中MinGW的CMake工具链文件如何修正?

问题

希望在Windows上使用未加入系统PATH的MinGW编译器构建简单项目,不想手动提前设置环境变量,尝试用CMAKE_TOOLCHAIN_FILE自动化但失败。

CLion自带的MinGW工具链路径:

  • gcc完整路径:E:\Softwares\CLion\bin\mingw\bin\gcc.exe
  • g++完整路径:E:\Softwares\CLion\bin\mingw\bin\g++.exe

当前使用的mingw-toolchain.cmake内容:

set(CMAKE_C_COMPILER "E:/Softwares/CLion/bin/mingw/bin/gcc.exe")
set(CMAKE_CXX_COMPILER "E:/Softwares/CLion/bin/mingw/bin/g++.exe")
set(CMAKE_MAKE_PROGRAM "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

执行的CMake命令:

cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:/Users/Nima/Desktop/CMake/mingw-toolchain.cmake" -DCMAKE_INSTALL_PREFIX=C:/Users/Nima/Desktop/CMake/Install/x64-release -SC:/Users/Nima/Desktop/CMake -BC:/Users/Nima/Desktop/CMake/Build/x64-release

得到的错误:

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Check for working C compiler: E:/Softwares/CLion/bin/mingw/bin/gcc.exe
-- Check for working C compiler: E:/Softwares/CLion/bin/mingw/bin/gcc.exe - broken
CMake Error at E:/Softwares/CMake/share/cmake-3.25/Modules/CMakeTestCCompiler.cmake:70 (message):
  The C compiler

    "E:/Softwares/CLion/bin/mingw/bin/gcc.exe"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: C:/Users/Nima/Desktop/CMake/Build/x64-release/CMakeFiles/CMakeScratch/TryCompile-86u4p4

    Run Build Command(s):C:/PROGRA~1/Microsoft Visual Studio/2022/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe cmTC_372a2 && [1/2] Building C object CMakeFiles\cmTC_372a2.dir\testCCompiler.c.obj
    FAILED: CMakeFiles/cmTC_372a2.dir/testCCompiler.c.obj
    E:\Softwares\CLion\bin\mingw\bin\gcc.exe    -o CMakeFiles\cmTC_372a2.dir\testCCompiler.c.obj -c C:\Users\Nima\Desktop\CMake\Build\x64-release\CMakeFiles\CMakeScratch\TryCompile-86u4p4\testCCompiler.c
    ninja: build stopped: subcommand failed.
         

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:3 (project)


-- Configuring incomplete, errors occurred!
See also "C:/Users/Nima/Desktop/CMake/Build/x64-release/CMakeFiles/CMakeOutput.log".
See also "C:/Users/Nima/Desktop/CMake/Build/x64-release/CMakeFiles/CMakeError.log".
解决方案

问题核心在于两点:MinGW的依赖库路径未被CMake识别,导致gcc编译时找不到必需组件;CMAKE_FIND_ROOT_PATH_MODE_*设置过于严格,干扰了编译器自身的依赖查找。修改toolchain文件如下:

  1. 添加MinGW根路径到CMAKE_FIND_ROOT_PATH:让CMake明确MinGW的头文件和库的查找位置
  2. 调整CMAKE_FIND_ROOT_PATH_MODE_PROGRAM为BOTH:允许CMake在系统PATH和指定根路径中查找程序,避免限制过严导致编译器依赖无法加载
  3. 显式设置目标系统:避免CMake自动检测系统时出现偏差

修改后的mingw-toolchain.cmake完整内容:

# 定义MinGW根目录,便于后续维护
set(MINGW_ROOT "E:/Softwares/CLion/bin/mingw")

# 指定C/C++编译器路径
set(CMAKE_C_COMPILER "${MINGW_ROOT}/bin/gcc.exe")
set(CMAKE_CXX_COMPILER "${MINGW_ROOT}/bin/g++.exe")

# 指定Ninja构建工具路径
set(CMAKE_MAKE_PROGRAM "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe")

# 设置CMake的查找根路径为MinGW目录
set(CMAKE_FIND_ROOT_PATH "${MINGW_ROOT}")

# 调整查找模式:程序允许在系统PATH和根路径查找,库和头文件仅在根路径查找
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# 显式声明目标系统为Windows
set(CMAKE_SYSTEM_NAME Windows)

额外注意事项

  • 清理之前的Build目录后重新执行CMake命令,避免旧缓存干扰
  • 若仍报错,查看CMakeError.log中的详细编译信息,可定位具体依赖缺失问题
  • 确保使用的MinGW版本(32/64位)与CMake生成的目标架构一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:01:36