CMake找不到Visual C ++编译器


118

安装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.

我去cl.exeVisual Studio文件夹中搜索,C:\Program Files\Microsoft Visual Studio 14.0但找不到它。

如何设置CMake以在Windows和Visual Studio 2015上运行?


1
也许2015年的安装路径不是CMake期望的?您使用哪个版本的CMake?另外,我也不知道Windows版本的CMake,但是CMake可能会在其中PATH查找所需的程序,因此,如果未更新,则找不到编译器。
一些程序员花花了

1
我正在使用cmake版本3.2.3,该版本声称支持Visual Studio 2015
Asher

1
使用版本3.2.x,在VS2015之前安装Cmake时遇到了此问题,因此请重新安装cmake为我解决此问题
Andiana 2016年

有时,您只是忘记重启计算机,或者在安装或更新Visual Studio之后不愿重启计算机。在这种情况下,CMake将找不到您的编译器。
Noki

Answers:


124

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

通过尝试在Visual Studio 2015 GUI中手动创建C ++项目,我能够提示它下载C ++程序包。这样,CMake就能毫无困难地找到编译器。


2
太酷了,这个答案给了我线索。我使用VS2015 ISO安装C ++组件并解决了问题。
彼得·梁20年

我还使用VS2015 ISO进行安装,并且仅安装了基本的vb / c#部件。必须再次启动ISO来修改和安装其他c ++东西。
Abhinav Gauniyal '16

2
你们确实安装了哪些软件包/组件/材料?我创建了一个Visual C ++ / Win32Project,它安装了两个组件,并且在VS中运行正常,但是cmake仍然像以前一样抱怨。谢谢。-S
ssimm '16

这是非常好的!
user2434741

2
这也适用于vs 2017-太奇怪了!谢谢小费,伙计!
史蒂夫·霍瓦斯

36

这是为我工作的解决方案:

  1. 打开Visual Studio命令提示符工具(以管理员身份)。在Windows 10上,它可能被称为“开发人员命令提示符”。
  2. 导航到具有CMake可执行文件的位置
  3. 运行Cmake.exe
  4. 像往常一样继续选择构建和源文件夹
  5. 选择适当的Visual Studio编译器,然后单击“配置”按钮

希望它应该运行没有问题。


3
我认为您不需要以管理员身份运行VS Command提示符。但是运行VS命令promt确实会将cmake寻找的所有内容都放在了路径上。根据安装CMake的方式(是否将其放置在路径上),还可以导航到构建目录并cmake ..从那里运行。无论如何都支持,因为例如git-bash终端不会自动将所有内容放在其路径上。这对我有帮助!
hetepeperfan '16

1
这似乎比解决方案更像是一种解决方法,因为通常,IDE生成器不需要在dev命令提示符集中找到的各种环境变量(仅当您使用Makefile生成器或类似的生成器时,才需要它)。身为忍者)
Ryan Pavlik

2
更新:在Windows 10上,这称为开发人员命令提示符
Mattijs

2
很奇怪的解释:1:它不叫VS Studio命令提示符2:“导航”,您的意思是使用“ cd”命令?3:您的意思是,运行cmake-gui?正如您在步骤5中所说,要“点击”按钮4:是否继续?你是说填写吗?5:在配置窗口的下拉框中,我可以选择VS编译器,但是仍然不知道C和C ++编译器...
DrumM

1
顺便说一句,只需输入搜索cmake,就会发现cmake-gui
DrumM

31

我查看了CMakeError.log文件,发现有关以下内容的错误 cannot run 'rc.exe'

我搜索并找到此答案,将RC.Exe和RcDll.Dll从Microsoft SDK箱复制到VC箱,然后CMake工作。


编辑:另一个问题的最高答案表明这是一个PATH问题,因此足以确保Microsoft SDK bin位于您的PATH中。


15

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


3
这也是我的问题。这是令人困惑的,因为Visual Studios 2015是版本14!
Paul Wintz '17

4
请注意,您可能需要删除缓存才能更改VS的版本。为此,请单击文件>删除缓存。
Paul Wintz '17

这帮助了……最好地进行版本控制!
Noel Widmer

arrrrg,@ PaulWintz感谢您的提醒。我认为在我的情况下,我使用干净的cmake缓存运行了cmake,但是在VisualStudio等待我重新启动计算机以完成VS更新时,然后cmake巧妙地缓存了这种情况。
Orion elenzil

13

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

必须安装用于CMake的Visaul C ++工具


那2015版呢?我在2015年安装中找不到此复选框。一种解决方案可能是更新到2017年...
DrumM

1
@DrumM,这是专门为Visual Studio 2017年。我不相信在功能VS 2015年存在
瓦迪姆·伯曼

您确定这是必要的吗?不仅是在Visual Studio中使用CMake吗?
彼得·莫滕森

@PeterMortensen:它为我解决了这个问题。此外,Visual Studio的2017年
瓦迪姆·伯曼

9

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

我被错误的-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". ...

然后选择适当的字符串所述[拱]加入。

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

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

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


7

对我来说,我检查了CMakeError.log文件并发现:

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

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

我使用Visual Studio安装程序添加了该组件,现在CMake非常高兴。


4

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

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

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

CMake可以找到rc.exe

cd到CMakeLists.txtand 的路径:

md .build
cd .build
cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release
cmake --build .

之后的参数-G应由CMake获取。使用--help; 您可能有也可能没有发电机。


如果您已安装msvc 2015和2017,并尝试使用msvc 2015进行构建,则在运行vs2015命令提示符时它将自动检测10.0 SDK。您可以通过以下方式指定SDK版本:修改“ VS2015 x64本机工具命令提示符”以通过在命令行参数的末尾添加这样来强制使用8.1 sdk;“%comspec%/ k”“ C:\ Program Files(x86)\ msdev2015 \ VC \ vcvarsall.bat”“ amd64 8.1”
kalmiya

我是否必须单独安装“ Visual Studio 2015的MSBuild命令提示符”?我安装了msvc 2017,但Visual Studio的命令提示符不存在。
下午

2

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

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

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


2

使用Visual Studio 2015专业版时,Windows 10在Windows 10下存在此问题,而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,现在问题解决了。



1

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

Visual Studio 2017套件:

Visual Studio2017软件包

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


0

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


0

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


0

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

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

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

设置完之后,我走得更远,但后来遇到了更多问题(所以我认为我的环境有些混乱),但是也许可以帮助解决此问题的人。


0

一些提示:

  • 尝试通过选中“高级”并修改CMAKE_LINKER和CMAKE_MAKE_PROGRAM来手动设置路径
  • 删除缓存-在带有GUI的CMake中,转到:文件→删除缓存。

我的问题是先前所述的结合:我将编译器版本设置为15而不是14,并且在更正后,我不得不删除缓存。

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

然后,一切按预期进行。


0

就我而言,问题是父项目,其中包括googletest通过

add_subdirectory(gtest_dir)

被定义为

PROJECT( projname CXX )

CMake无法识别

PROJECT(sub_project_name CXX C)

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

我通过使用解决了这个问题

PROJECT( projname CXX C)

在我的主CMakeLists.txt文件中。



0

以前的解决方案都没有对我有用。但是我注意到,尽管我安装了Visual Studio版本15(不要与Visual Studio 2015混淆),但在我的计算机上创建的目录却是针对Visual Studio 14的。

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


Visual Studio的版本编号只是...奇怪。Visual Studio 14实际上是Visual Studio 2015,没有Visual Studio2014。请参见trophygeek的答案stackoverflow.com/a/40332976/1319284
kutschkem,

0

我在stackoverflow上找到了这种解决方案,并且为我工作,尽管如果您使用Windows 10 OS,则无法使用其他解决方案,请执行以下步骤将解决此问题:

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,然后将已复制的两个文件粘贴到其中。

多数民众赞成我希望这会有所帮助...


0

如果找到ARM,则需要在Cmakelists.txt中查找,您需要安装用于ARM的C ++以及用于ARM bin文件夹的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处理器编译。



0

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

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


0

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

C:\ Program Files(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安装程序中安装了适当的功能:

在此处输入图片说明


0

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



-3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.