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

CMake无法匹配MinGW Makefiles构建程序及OpenBLAS库查找失败求助

问题:Windows 10下MSYS2 MinGW64环境CMake编译及OpenBLAS查找失败

一、命令行CMake执行错误

运行以下命令后出现报错:

cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=C:\msys64\mingw64\bin\gcc.exe .

错误输出:

-- The C compiler identification is unknown
-- Check for working C compiler: C:/msys64/mingw64/bin/gcc.exe
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:56 (try_compile):
  Failed to configure test project build system.
Call Stack (most recent call first):
  CMakeLists.txt:6 (project)

-- Configuring incomplete, errors occurred!

二、当前CMakeLists.txt内容

cmake_minimum_required(VERSION 3.27)
set(OPENBLAS_LIB_DIR "C:/msys64/mingw64/lib")
set(CMAKE_MAKE_PROGRAM "C:/msys64/mingw64/bin/make.exe")

project(PROJECT_1 C)

set(CMAKE_C_STANDARD 23)


add_executable(PROJECT_1 src/main.c)

# I'm not sure about the following but thats another problem I want to solve

set(OPENBLAS_LIB_DIR "C:/msys64/mingw64/lib")
find_library(OPENBLAS_LIBRARY NAMES openblas PATHS ${OPENBLAS_LIB_DIR})

message("OpenBLAS library not found ${LIBRARY}")

if(NOT OPENBLAS_LIBRARY)
    message(FATAL_ERROR "OpenBLAS library not found ${CMAKE_SYSTEM_LIBRARY_PATH}")
endif()

find_package(OpenBLAS REQUIRED)
#find_library(OpenBLAS REQUIRED)
#include_directories(${CMAKE_PREFIX_PATH})
target_link_libraries(PROJECT_1 OpenBLAS::OpenBLAS)

三、环境说明

  • 系统:Windows 10
  • 工具链:MSYS2 MinGW64,已通过mingw64.exe安装相关包
  • 环境变量:已添加C:\msys64\mingw64\bin\到PATH
  • 已卸载TDM编译器,避免工具链冲突
  • 曾尝试手动设置SET( CMAKE_MAKE_PROGRAM c:/MinGW-32/bin/make.exe FORCE ),问题未解决

四、CMake GUI的问题

CMake GUI可识别编译器,但无法找到MSYS2安装的OpenBLAS库,报错输出:

The C compiler identification is GNU 13.2.0
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped
Detecting C compile features
Detecting C compile features - done
OpenBLAS library not found 
Configuring done (1.7s)

解决方案

1. 解决CMake找不到MinGW Makefiles构建工具的问题

  • 优先使用MSYS2 MinGW64终端运行CMake:打开mingw64.exe终端,进入项目目录后再执行CMake命令。MSYS2会自动配置工具链环境变量,避免路径识别问题。
  • 手动指定CMAKE_MAKE_PROGRAM路径:如果必须在Windows原生终端执行,需确保路径指向MinGW64的make.exe,命令修改为:
    cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=C:\msys64\mingw64\bin\gcc.exe -DCMAKE_MAKE_PROGRAM=C:\msys64\mingw64\bin\make.exe .
    
    或者在CMakeLists.txt中,将CMAKE_MAKE_PROGRAM的设置放在project()命令之前,并添加CACHE声明:
    cmake_minimum_required(VERSION 3.27)
    set(CMAKE_MAKE_PROGRAM "C:/msys64/mingw64/bin/make.exe" CACHE PATH "Path to make.exe")
    set(OPENBLAS_LIB_DIR "C:/msys64/mingw64/lib")
    
    project(PROJECT_1 C)
    

2. 解决OpenBLAS查找失败的问题

  • 修正变量引用错误:CMakeLists.txt中message("OpenBLAS library not found ${LIBRARY}")的${LIBRARY}是未定义变量,应改为${OPENBLAS_LIBRARY}。
  • 简化OpenBLAS查找逻辑:MSYS2安装的OpenBLAS自带CMake配置文件,可直接通过find_package查找,无需手动调用find_library。修改后的相关代码:
    # 查找OpenBLAS,指定根目录确保找到MSYS2安装的版本
    set(OpenBLAS_ROOT "C:/msys64/mingw64")
    find_package(OpenBLAS REQUIRED)
    
    # 链接库到目标
    target_link_libraries(PROJECT_1 PRIVATE OpenBLAS::OpenBLAS)
    
  • 确认OpenBLAS已安装:在MSYS2 MinGW64终端执行pacman -Q mingw-w64-x86_64-openblas检查包状态,未安装则执行pacman -S mingw-w64-x86_64-openblas完成安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:22:35