CMake无法找到Visual C++编译器

141
安装了Visual Studio 2015并在之前的项目上运行CMake后,CMake报错无法找到C编译器。
The C compiler identification is unknown
The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_CXX_COMPILER could be found.

我在Visual Studio文件夹中查找cl.exe,即C:\Program Files\Microsoft Visual Studio 14.0,但未能找到。

如何在Windows上使用Visual Studio 2015设置CMake工具?


1
也许2015的安装路径不是CMake所期望的?您使用的CMake版本是哪个?此外,我不清楚Windows版本的CMake,但可能CMake会在PATH中查找所需的程序,因此如果未更新,则无法找到编译器。 - Some programmer dude
1
我正在使用 cmake 3.2.3 版本,它声称支持 Visual Studio 2015。 - Asher
1
使用版本3.2.x,在安装VS2015之前,我遇到了安装Cmake时的问题,因此重新安装Cmake解决了我的问题。 - Andiana
有时候你可能会忘记重启电脑,或者在安装或更新Visual Studio后不想重启。这种情况下,CMake就无法找到你的编译器。 - Noki
在 VS 2022 中遇到了这个问题。找到了这个解决方案。更改注册表 HKLM\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot10 解决了它。 - Henry Fung
31个回答

0

我在VSCode Cmake扩展中遇到了同样的问题,通过检查以下两个选项解决了它: enter image description here enter image description here

最后,点击[扫描套件]


0
这个问题很老,但这里的解决方案都对我没用。我正在使用Visual Studio 2019,在我的情况下,C++编译一直在工作,但有一天突然就坏了。
然而,我注意到Visual Studio Installer中有一个可以安装的更新。
安装那个更新后,重新启动计算机并重新启动Visual Studio,所有的C++ CMake问题都消失了。我不太确定为什么会修复它,只能推测两件事情中的一件发生了。要么安装那个更新修复了已经损坏的安装程序,要么更新在后台静默下载和准备时破坏了东西。

0

0
在我的情况下,有一个环境变量被设置了,这就是导致这个错误的原因。在从环境变量中删除cxx_flags后,问题得到了解决。

0
通过添加缺失的组件解决 修改->继续按以下方式添加 Fix

1
不建议使用仅包含链接的答案。 - Ṃųỻịgǻňạcểơửṩ

0

我在使用CMake GUI和VS 2019社区版时遇到了问题。我想我可能是在安装Visual Studio之前安装了CMake - 当我将CMake 3.15.2更新为3.15.3后,问题消失了。


0
在我的情况下,我可以在 CMakeError.log 中看到 CMake 找不到 Windows SDK (MSB8003:无法从注册表中找到 WindowsSDKDir 变量)。
版本可以在第一次使用以下命令行指定CMake运行时指定:
-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

我在设置后取得了进展,但后来遇到了更多问题(因此我认为我的环境出了些问题),但也许这会对遇到类似问题的人有所帮助。

0

如果在Cmakelists.txt中找到了ARM,您需要安装针对ARM的C++以及vcvarsall.bat用于ARM二进制文件夹。

这些软件包是:

C++通用Windows平台(ARM64)“不需要”

Visual C++编译器和库(ARM)“不需要”

Visual C++编译器和库(ARM64)“很可能需要”

Required for finding Threads on ARM 
enable_language(C) 
enable_language(CXX)

接下来可能会解决这些问题:

无法找到 CMAKE_C_COMPILER。

无法找到 CMAKE_CXX_COMPILER。

如果以上方法不能解决您的问题?

您可以选择通过在 cmakelists.txt 中设置 # 在 enable_language(C) 的前面,删除选项 C 和 CXX。避免 Android ARM 处理器编译。


0
在我的情况下,问题是父项目通过包含googletest来实现的。
add_subdirectory(gtest_dir)

被定义为

PROJECT( projname CXX )

不知何故,CMake无法识别

PROJECT(sub_project_name CXX C)

由于父级中未设置C编译器。

我通过使用以下方法解决了这个问题

PROJECT( projname CXX C)

在我的主要CMakeLists.txt文件中。

-1

cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug "-DCMAKE_C_COMPILER:FILEPATH=C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\gcc.exe" "-DCMAKE_CXX_COMPILER:FILEPATH=C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\g++.exe" -Hc:/code -Bc:/code/build -G "MinGW Makefiles"


1
请描述一下这样做如何有助于解决问题。 - Jim Fell

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