CMake找不到Visual C ++编译器

时间:2015-07-24 20:31:33

标签: c++ cmake visual-studio-2015

安装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,但找不到它。

如何使用Visual Studio 2015将CMake设置为在Windows上运行?

29 个答案:

答案 0 :(得分:113)

我找到了解决方案。 Visual Studio IDE安装成功后,它没有安装任何构建工具,因此没有安装C ++编译器。

尝试手动create a C++ project in the Visual Studio 2015 GUI我能够提示它下载C ++包。然后CMake能够毫无困难地找到编译器。

答案 1 :(得分:31)

以下是适用于我的解决方案:

  1. 打开Visual Studio命令提示符工具(以管理员身份)
  2. 导航到您拥有CMake可执行文件的位置
  3. 运行Cmake.exe
  4. 继续照常选择构建和源文件夹
  5. 选择适当的Visual Studio编译器并点击配置按钮
  6. 希望它应该没有问题。

答案 2 :(得分:28)

我查看了CMakeError.log文件,发现有关cannot run 'rc.exe'

的错误

我搜索并发现this answer将RC.Exe和RcDll.Dll从Microsoft SDKs bin复制到VC bin,然后CMake工作。

编辑:The top answer to another question表明它是一个PATH问题,因此可能足以确保Microsoft SDK bin位于您的PATH中。

答案 3 :(得分:14)

确保在生成器中使用正确版本的Visual Studio。安装Visual Studio 14时,我错误地选择了Visual Studio 15。

答案 4 :(得分:11)

在Visual Studio 2017上遇到这种绊脚石:有一个与CMake相关的功能需要与相关的编译器工具集一起选择和安装。请参见下面的屏幕截图。

Visaul C++ tools for CMake must be installed

答案 5 :(得分:8)

如果以上解决方案均无效,请停止并进行健全性检查。

我使用错误的-G <config>字符串进行了刻录,这给了我这个误导性错误。

首先,从VS命令提示符而不是常规命令提示符运行。你可以找到它 Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015这将设置VS工具的所有正确路径等。

现在看看cmake提供了哪些发电机......

cmake -help

...<snip>... The following generators are available on this platform: Visual Studio 15 [arch] = Generates Visual Studio 15 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files. Optional [arch] can be "Win64" or "IA64". ...

然后选择适当的字符串 添加[arch]。

mkdir _build cd _build cmake .. -G "Visual Studio 15 Win64"

在子目录中运行cmake可以更轻松地执行“清理”工作。因为你可以删除该目录中的所有内容。

我升级到Visual Studio 15,但没有注意,并试图在2012年生成。

答案 6 :(得分:6)

对我来说,我检查了CMakeError.log文件并找到了:

  

[...]错误MSB8036:找不到Windows SDK版本8.1。安装所需版本的Windows SDK或在项目属性页中更改SDK版本,或右键单击解决方案并选择“重新定位解决方案”。

尽管在Windows 7上使用Visual Studio 2017,但似乎CMake正在尝试使用Windows 8.1 SDK构建其检测项目。

我使用Visual Studio安装程序添加该组件,现在CMake很高兴作为一个蛤蜊​​。

答案 7 :(得分:4)

菜单→Visual Studio 2015→Visual Studio 2015的MSBuild命令提示符。然后CMake可以找到pytest 3.2.5

cl.exe

将上部路径更改为Windows SDK的安装位置。

CMake可以找到set PATH="c:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\";%PATH%

cd到rc.exe的路径并执行:

CMakeLists.txt

CMake应该获取md .build cd .build cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release cmake --build . 之后的参数。使用-G;你可能有也可能没有发电机。

答案 8 :(得分:1)

如果您使用的是Visual Studio 2017,则至少需要CMake 3.8!

答案 9 :(得分:1)

我在Windows 10下使用Visual Studio 2015 Professional时遇到了这个问题,而Visual Studio 2015 Express起作用了!在Windows 7下,两个Visual Studio版本过去都可以工作。

通过Visual Studio 2015 Professional IDE创建的新项目已成功编译,但CMake无法找到编译器报告:

The C compiler identification is unknown
The CXX compiler identification is unknown

我将CMake从3.4.1升级到3.11.4,现在问题解决了。

答案 10 :(得分:1)

作为已接受答案的替代方案,您可以直接安装C ++ as described here

答案 11 :(得分:0)

一些提示:

  • 尝试通过检查&#39; advanced&#39;手动设置路径。并修改CMAKE_LINKER和CMAKE_MAKE_PROGRAM
  • 删除缓存 - 在带有GUI的CMake中转到: 文件→删除缓存。

我的问题是之前声明的组合:我已将编译器版本设置为15而不是14,并且在更正后,我不得不删除缓存。

我还以管理员身份启动了Visual Studio命令提示符,并从那里运行了cmake-gui.exe

然后一切都按预期工作。

答案 12 :(得分:0)

检查名称文件夹是否太长

答案 13 :(得分:0)

我在CMake GUI和VS 21019社区版中遇到了这个问题。我想我可能已经在Visual Studio之前安装了CMake-肯定是在将CMake 3.15.2更新到3.15.3之后,问题消失了。

答案 14 :(得分:0)

在返回的CMakeFiles中检查CMakeErrors.log:

  

C:\ Program文件   (x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Platforms \ x64 \ PlatformToolsets \ v140_xp \ Toolset.targets(36,5):警告MSB8003:找不到WindowsSdkDir_71A变量   注册表。 TargetFrameworkVersion或PlatformToolset可以设置为   版本号无效。

该错误意味着未安装XP(v140_xp)的生成工具。要修复它,我在单个组件选项卡下的Visual Studio 2019安装程序中安装了适当的功能:

enter image description here

答案 15 :(得分:0)

我遇到一个相关的问题:运行cmake --help时,Visual C ++生成器甚至不在列表中。

我在控制台中运行where cmake,发现cygwin还提供了自己的 cmake.exe 文件,该文件正在使用中。更改PATH中目录的顺序可以解决此问题。

答案 16 :(得分:0)

通过添加缺少的组件来解决 修改->继续添加如下 Fix

答案 17 :(得分:0)

如果找到ARM,请查看Cmakelists.txt,您需要为ARM安装C ++,并为vc bins文件夹安装vcvarsall.bat。

这些程序包:

“不需要”用于ARM64的C ++通用Windows平台

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

“非常可能需要” ARM64的Visual C ++编译器和库

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

然后问题可能会消失:

找不到CMAKE_C_COMPILER。

找不到CMAKE_CXX_COMPILER。

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

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

答案 18 :(得分:0)

我在stackoverflow上找到了这种解决方案,尽管没有其他解决方案,但我为我工作  如果您使用Windows 10操作系统,请执行以下步骤将解决此问题:

1)转到C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Bin

2)然后从该文件复制RC.exe和RcDll

3)转到C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ bin,然后将已复制的两个文件粘贴到其中。

这就是我希望对您有所帮助...

答案 19 :(得分:0)

在更新了Visual Studio 2017之后,我在CMake 3.12.1中遇到了这个问题。我只是重新运行CMake即可。

答案 20 :(得分:0)

我对通过CMake生成的Visual Studio 2017项目有类似的问题。使用C ++在桌面开发中安装Visual Studio时,缺少某些软件包。查看快照:

Visual Studio 2017软件包:

Visual Studio2017 Packages

另外,将CMake升级到最新版本。

答案 21 :(得分:0)

我遇到了同样的问题并通过重新启动Visual Studio安装并检查以下选项来修复它:

Windows and Web Development / Universal Windows App Development Tools / Windows 10 SDK

它包含大多数应用程序中使用的标准C ++标头,因此通常也需要安装它。

答案 22 :(得分:0)

以前的解决方案都不适合我。但是我注意到虽然我安装了Visual Studio 15版(不要与Visual Studio 2015混淆),但我的计算机上创建的目录是针对Visual Studio 14的。

当我按下配置按钮时指定Visual Studio 14时,它工作正常。

答案 23 :(得分:0)

就我而言,我可以在CMakeError.log中看到CMake无法找到Windows SDK(MSB8003: Could not find WindowsSDKDir variable from the registry)。

可以使用以下命令在第一个CMake运行的命令行上指定版本:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

我在设定之后得到了更多,但我后来遇到了更多的问题(所以我认为我的环境在某种程度上搞砸了),但也许这会帮助有这个问题的人。

答案 24 :(得分:0)

对于拥有最新Windows 10创建者版本的人来说,这可能是另一种解决方案:

Stack Overflow post Fatal error LNK1104: cannot open file 'gdi32.lib'

答案 25 :(得分:0)

在我的情况下,有一个环境变量集,这是造成此错误的原因。 从环境变量中删除cxx_flags后问题得以解决。

答案 26 :(得分:0)

在我的情况下,问题是父项目,包括googletest via

add_subdirectory(gtest_dir)

定义为

PROJECT( projname CXX )

不知何故,CMake无法识别

PROJECT(sub_project_name CXX C)

因为C编译器未在父级中设置。

我使用

解决了这个问题
PROJECT( projname CXX C)

在我的主CMakeLists.txt文件中。

答案 27 :(得分:-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"

答案 28 :(得分:-2)

因为CMake无法找到您的Visual Studio编译器。启动任何将下载所需编译器的项目,然后CMake必须能够找到它。