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,命令修改为:
或者在CMakeLists.txt中,将cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=C:\msys64\mingw64\bin\gcc.exe -DCMAKE_MAKE_PROGRAM=C:\msys64\mingw64\bin\make.exe .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
相关产品推荐
相关产品推荐

