CMAKE_MAKE_PROGRAM未找到。

91

我对CMake已经万念俱灰了;它有很大的潜力,但是似乎无法找到基本系统工具(如make),以便正常运行。

症状

在删除CMakeCache.txt文件后,CMake和CMake GUI会产生以下结果:

Processing top-level CMakelists.txt for project swb
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.

我在这个问题中专注于找到make,但是我也遇到了很多与CMake无法找到库和其他实用文件(链接器、nm、ar等)的相同问题。我在下面列出的技巧似乎可以让CMake在Linux下找到这些文件。

系统

Windows 7(64位);多个MinGW版本(32位/64位);Cmake 2.8.4;MinGW的非标准安装位置(c:/MinGW-32)。

我尝试过的事情

  1. CMakelists.txt文件的前10行包含 SET(CMAKE_MAKE_PROGRAM c:/MinGW-32/bin/make.exe FORCE)

  2. 先前的CMakelists.txt版本包含:

    find_program(CMAKE_MAKE_PROGRAM
      NAMES make
            make.exe
      DOC "Find a suitable make program for building under Windows/MinGW"
      HINTS c:/MinGW-32/bin )  
    
  3. 在运行 CMake 或 CMake-GUI 之前,在 cmd.exe 环境变量中设置 CMAKE_MAKE_PROGRAM

  4. 使用“工具链”文件来标识 CMAKE_MAKE_PROGRAM 以及 CMAKE_C_COMPILER 等。

有效的方法

如果我使用 GUI 填充 CMAKE_MAKE_PROGRAM 变量("C:/MinGW-32/bin/make.exe"),则 CMake 将成功地创建构建文件。

问题

我可以通过 GUI 标识 make 程序的名称使 CMake 工作。 如何使 CMake 在 Windows 7 (64-bit) / MinGW 组合中找到我的 make 程序而无需用户干预?


你可以查看这个答案。https://dev59.com/vMLra4cB1Zd3GeqPUuwO#74240235 - gkhanacer
16个回答

43

我有两个建议:

  1. 你的 %PATH% 环境变量中是否包含 make?在我的系统上,我需要将 %MINGW_DIR%\bin 添加到 %PATH%。

  2. 你是否安装了 make?根据你的 mingw 安装方式,它可能是一个单独的包。

  3. 最后的选择:你能否在命令行中传递 make 的完整路径?cmake -D"CMAKE_MAKE_PROGRAM:PATH=C:/MinGW-32/bin/make.exe" ..\Source


谢谢您的建议!我已经将%MINGW_DIR%\bin添加到了我的路径中,而且make.exe明确在%MINGW_DIR%\bin目录中。还有其他想法吗? - westie314
@westie314:make 是否在您的路径中?如果您打开命令行并键入“make --version”,会显示什么? - Stephen Newell
5
CMake会查找'make'还是'mingw32-make'? 如果是后者,则需要将它也加入路径中。 - André

24
在GUI中,选择“高级”复选框。现在应该会显示几个条目。将您的mingw32-make.exe文件重命名为make.exe(您可以只复制它)并将CMAKE_MAKE_PROGRAM文件路径变量设置为该文件的位置。

2
这应该是被接受的答案。对我有用:检查“高级”,然后CMAKE_MAKE_PROGRAM变量出现。只需将NOT_FOUND_SOMETHING更改为您的C:/MinGW/bin/make.exe或任何路径即可。 - smoothware
1
我的GUI没有显示任何设置CMAKE_MAKE_PROGRAM。有什么想法吗? - Schütze
您可以手动创建条目,方法是单击“添加条目”,并填写以下字段:名称 - CMAKE_MAKE_PROGRAM,类型 - FILEPATH,值 - X:/Path/To/Make。或者通过在命令行中添加“-DCMAKE_MAKE_PROGRAM=X:/Path/To/Make”来完成。希望这有所帮助。 - FallenWarrior

20

在Ubuntu系统中,我认为我缺少了编译器。通过以下方式解决:

sudo apt install build-essential

1
只是返回翻译后的文本,不解释问题。 - Micha93

16

我刚刚解决了同样的问题。我安装了MinGW并有GCC和G++,但没有make。这个命令帮助了我:

mingw-get.exe install mingw32-make
在运行完成之后,清除CMake缓存(删除CMake工作目录中的CMakeCache.txt文件),然后再次运行CMake。

2
在MinGW基本设置中,包括mingw32-base以获取make。 - Andrew Cheong
如果您使用的是Cygwin,您还需要安装make。找到apt-cyg并使用apt-cyg install make - not2qubit

9

之前的回答建议重新安装或配置CMake,但都没有帮助。

以前MinGW编译Make使用的文件名是mingw32-make.exe,现在是make.exe。大多数建议配置CMake使用其他文件的方法都不起作用。

只需复制make.exe并将副本重命名为mingw32-make.exe即可。


7

我试过安装缺失的软件包。在安装工具链和重新启动CLion后,我的问题得到了解决:

pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-extra-cmake-modules
pacman -S mingw-w64-x86_64-make
pacman -S mingw-w64-x86_64-gdb
pacman -S mingw-w64-x86_64-toolchain

这对于较新版本的MinGW非常完美,因为mingw32-make已经不存在了。 - Zoe stands with Ukraine

3
当我试图使用Qt Creator(MinGW)编译OpenCV以构建.a静态库文件时,我遇到了完全相同的问题。
对于那些安装了Qt 5.2.1 for Windows 32-bit (MinGW 4.8, OpenGL, 634 MB)的人来说,如果您将以下内容添加到系统环境变量Path中,则可以解决此问题。
C:\Qt\Qt5.2.0\Tools\mingw48_32\bin

3

最近我遇到了跟你一样的问题(在WIN764上使用CMake和Qt/MinGW编译OpenCV),

我通过控制面板\所有控制面板项\系统\高级系统设置在我的环境变量PATH中添加了%MINGW_DIR%\bin和%CMAKE_DIR%/bin,解决了这个问题。

此外,我还将cmake2.8安装在一个没有空格的简单目录下。


1
似乎每个人都有不同的解决方案。我像这样解决了我的问题:
当我安装64位mingw时,它自动安装到:“C:\Program Files\mingw-w64\x86_64-5.1.0-posix-seh-rt_v4-rev0\mingw64\bin”
尽管mingw-make.exe在上述路径下,但一个无效的字符或过长的路径名会让CMake感到困惑。我尝试将路径添加到环境变量中,尝试将CMAKE作为参数传递,但对我来说都没有用。
最后,我将复杂的mingw-w64路径移动到“C:/mingw64”,然后设置环境路径,重新启动CMake。问题得到解决。

1
我曾经遇到过同样的问题。 使用http://tdm-gcc.tdragon.net/提供的安装程序安装mingw。在安装mingw时,它会自动将正确的环境变量添加到路径中(无需手动编辑路径变量)。 这对我很有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接