Windows 上的 CMake

38

我正在尝试在Windows上运行CMake,但是遇到了以下错误:

-- The C compiler identification is unknown
CMake Error at CMakeLists.txt:3 (PROJECT):
  The CMAKE_C_COMPILER:

    cl

  is not a full path and was not found in the PATH.

  To use the NMake generator with Visual C++, cmake must be run from a shell
  that can use the compiler cl from the command line.  This environment is
  unable to invoke the cl compiler.  To fix this problem, run cmake from the
  Visual Studio Command Prompt (vcvarsall.bat).

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.

然而我的"CC"环境变量已经设置好了!

>>echo %CC%
C:\Anaconda2\MinGW\x86_64-w64-mingw32\bin\gcc.exe

8
可能是 在 Windows 上运行 CMake 的重复问题。 - Guillaume
请问您能否提供您使用的 cmake.exe ... 命令?另外一个猜测是 C:\Anaconda2\MinGW\x86_64-w64-mingw32\bin 不在您的 PATH 环境变量中(正如错误信息所示)。请参考这里 - Florian
@Florian 只是普通的调用方式:"cmake .."。是的,它不在我的PATH中,错误信息如下:通过设置环境变量"CC"或CMake缓存条目CMAKE_C_COMPILER的完整路径,或者设置为编译器名称(如果在PATH中),告诉CMake在哪里找到编译器。所以我的CC指向完整路径,而不仅仅是名称...不应该有任何问题。 - João Abrantes
@JoãoAbrantes,你还需要将MinGW二进制目录添加到“PATH”中,因为“gcc.exe”依赖于该目录中的DLL。如果我在Dependency Walker应用程序中查看我的“gcc.exe”,我会得到对“LIBWINPTHREAD-1.DLL”的引用。 - Florian
@Florian Ok,我现在已经将MinGW二进制目录添加到PATH中了。但是错误仍然存在 :( - João Abrantes
3个回答

27

因为CMake的错误信息具有误导性,所以我认为它需要更详细的解释。

简而言之,你遇到了一个鸡生蛋的问题。

CMake的编译器检测功能非常强大,但是在第一次尝试中:

  • 你没有给出任何显式生成器来使用-G
  • 它找不到已安装的Visual Studio
  • 它在PATH环境变量中找不到任何C/C++编译器
  • 它找不到定义了完整路径到编译器的CC环境变量

它会默认使用nmake

现在问题来了:它记住了你隐式选择的生成器/编译器,并将其保存在其变量缓存中(请参见CMakeCache.txt中的CMAKE_GENERATOR)。如果你安装了多个编译器,这是一个非常有用的功能。

但是,如果您随后声明CC环境变量 - 正如错误消息所建议的那样 - 为时已晚,因为在第一次尝试中生成器的选择已被记住。

我看到两种可能的解决方法:

  1. 通过使用cmake.exe -G "MinGW Makefiles" ..(如@Guillaume提供的答案所示),给出正确的生成器选择,以覆盖生成器的选择。
  2. 删除项目的二进制输出目录(包括CMakeCache.txt),并在将编译器的bin文件夹添加到PATH环境后执行cmake.exe ..

参考资料


3
我添加了路径C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\bin\Hostx64\x64,这样就可以使用了。cl未被添加到路径中。 - c3cris

2

我使用 cmake -G "MinGW Makefiles" . 代替 cmake . 它有效了!


0

我遇到了相同的问题,解决方法如下:

  1. 我按照这个教程安装了Visual Studio。
  • 你需要安装2019版本(现在是2021年)--有一些额外的东西,但没关系。整个安装包大约6.7G。
  • 你不需要pip install dlib这部分以及其余部分。
  1. 在以上教程的基础上,我将这个路径添加到了环境变量中(C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30037\bin\Hostx64\x64。具体如何添加环境变量也可以在上面的教程中找到。)

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