CMake 找不到 VisualC + + 编译器

在安装 VisualStudio2015并在以前的项目上运行 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.

我在 VisualStudio 文件夹 C:\Program Files\Microsoft Visual Studio 14.0中搜索了 cl.exe,但是找不到它。

如何设置 CMake 以在 Windows 上使用 VisualStudio2015?

248120 次浏览

我找到解决办法了。虽然 VisualStudioIDE 安装成功,但它没有安装任何生成工具,因此没有安装 C + + 编译器。

通过尝试手动 在 VisualStudio2015GUI 中创建一个 C + + 项目,我能够提示它下载 C + + 包。CMake 随后能够毫无困难地找到编译器。

以下是对我有效的解决方案:

  1. 打开 VisualStudio 命令提示工具(作为管理员)。在 Windows10上它可能被称为“ Developer 命令提示”。
  2. 导航到拥有 CMake 可执行文件的位置
  3. 运行 Cmake. exe
  4. 像往常一样选择生成和源文件夹
  5. 选择适当的 VisualStudio 编译器并单击 configure 按钮

希望它能顺利运行。

我遇到了同样的问题,通过重新启动 VisualStudioInstall 并检查以下选项修复了这个问题:

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

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

如果上面的解决方案都不管用,那么停下来做一个清醒的检查。

我被烧毁使用错误的 -G <config>字符串,它给了我这个误导性错误。

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

现在看看 Cmake 有什么发电机。

cmake -help

... 该平台提供以下发电机: VisualStudio15[ arch ] = 生成 VisualStudio15项目文件。 可选的[ arch ]可以是“ Win64”或“ ARM”。 VisualStudio142015[ arch ] = 生成 VisualStudio2015项目文件。 可选的[ arch ]可以是“ Win64”或“ ARM”。 VisualStudio122013[ arch ] = 生成 VisualStudio2013项目文件。 可选的[ arch ]可以是“ Win64”或“ ARM”。 VisualStudio112012[ arch ] = 生成 VisualStudio2012项目文件。 可选的[ arch ]可以是“ Win64”或“ ARM”。 VisualStudio102010[ arch ] = 生成 VisualStudio2010项目文件。 可选的[ arch ]可以是“ Win64”或“ IA64”。 ...

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

Mkdir _ build Cd _ build Cmake. .-G“ Visual Studio 15 Win64”

在子目录中运行 cmake 可以更容易地执行“ clean”,因为您可以删除该目录中的所有内容。

我升级到了 VisualStudio15,但没有注意,而是试图为2012年生成。

在我的案例中,我可以看到在 CMakeError.log中,CMake 找不到 WindowsSDK (MSB8003: Could not find WindowsSDKDir variable from the registry)。

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

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

在设置了这个选项之后,我进一步深入,但是后来我遇到了更多的问题(所以我假设我的环境是混乱的) ,但是也许它会帮助某些人解决这个问题。

确保在生成器中使用的 VisualStudio 版本正确。在安装 VisualStudio14时,我错误地选择了 VisualStudio15。

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

一些小贴士:

  • 通过检查“ Advanced”并修改 CMAKE _ LINKER 和 CMAKE _ MAKE _ PROGRAM,尝试手动设置路径
  • 删除缓存-在 CMake 中使用 GUI 访问: 文件→删除缓存。

我的问题是前面提到的一个组合: 我将编译器版本设置为15,而不是14,如果修正,我必须删除缓存。

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

然后一切都按计划进行。

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

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

尽管在 Windows7上使用了 VisualStudio2017,情况仍然如此。所以看起来 CMake 正在尝试用 Windows 8.1 SDK 构建它的检测项目。

我使用 VisualStudio 安装程序添加了该组件,现在 CMake 非常满意。

在我的案例中,问题是父项目,其中包括 googletest via

add_subdirectory(gtest_dir)

被定义为

PROJECT( projname CXX )

不知为何,CMake 不承认

PROJECT(sub_project_name CXX C)

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

我用

PROJECT( projname CXX C)

在我的主 CMakeLists.txt文件中。

我查看了 CMakeError.log 文件,发现关于 cannot run 'rc.exe'的一个错误

我搜索并找到了 这个答案来复制 RC.exe 和 RcDll。Dll 从 Microsoft SDK 仓库到 VC 仓库,然后 CMake 工作。


编辑: 另一个问题的最佳答案表明这是一个 PATH 问题,因此它可能足以确保 Microsoft SDK bin 在您的 PATH 中。

在我的例子中,有一个环境变量,这就是导致这个错误的原因。 在从环境变量中删除 cxx _ Flag 之后,问题得到了解决。

那些在 Visual Studio 2017中遇到这个问题的人: 有一个与 CMake 相关的特性需要选择并与相关的编译器工具集一起安装。请看下面的截图。

Visaul C++ tools for CMake must be installed

如果你使用 Visual Studio 2017,你至少需要 CMake 3.8!

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

堆栈溢出后 致命错误 LNK1104: 无法打开文件 & # 39; gdi32.lib & # 39;

菜单→ VisualStudio2015→ VisualStudio2015的 MSBuild 命令提示符。

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

将上层路径更改为 WindowsSDK 的安装位置。

CMake 可以找到 rc.exe

Cd 到 CMakeLists.txt的路径,然后执行:

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

-G之后的参数应该由 CMake 获取。请使用 --help; 生成器可能在您手上,也可能不在您手上。

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

当我指定 VisualStudio14时,当我按下配置按钮时,它工作了。

我在 Windows10下使用 VisualStudio2015Professional 时遇到了这个问题,而 VisualStudio2015Express 可以工作!在 Windows7下,两个 VisualStudio 版本都可以工作。

从 VisualStudio2015ProfessionalIDE 创建的新项目成功编译,但 CMake 将无法找到编译器报告:

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

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

我在通过 CMake 生成的 VisualStudio2017项目中遇到过类似的问题。在使用 C + + 在桌面开发中安装 VisualStudio 时,一些包丢失了。见快照:

VisualStudio2017软件包:

Visual Studio2017 Packages

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

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

我在 stackoverflow 找到了这个解决方案,我为自己工作,虽然没有其他的解决方案 如果你使用的是 windows 10操作系统,按照以下步骤可以解决这个问题:

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

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

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

这就是我所希望的。

查看 Cmakelists.txt,如果您发现 ARM,您需要为 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。

如果以上问题不能解决你的问题?

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

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

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

我在控制台中运行 where cmake,发现 cygwin 也提供了它自己的 Cmake exe文件,这个文件正在被使用。更改 PATH 中目录的顺序修复了这个问题。

检查 CMakeErrors.log 返回的 CMakeFiles:

C: 程序文件 (x86) MSBuild Microsoft. Cpp v4.0 V140 Platformsx64 PlatformToolsets V140 _ xp Toolset.target (36,5) : 警告 MSB8003: 无法从 可以将 TargetFrameworkVersion 或 PlatformToolset 设置为 无效版本号码。

这个错误意味着没有安装 XP (v140 _ XP)的构建工具。为了解决这个问题,我在 VisualStudio2019安装程序的“个人组件”选项卡下安装了适当的特性:

enter image description here

我在使用 CMake GUI 和 VS 21019社区版时遇到了这个问题。我想我可能在 Visual Studio 之前就安装了 CMake ——当然,在我将 CMake 3.15.2升级到3.15.3之后,问题就消失了。

检查名称文件夹 太久了与否。

- DCMAKE _ CXX _ COMPILE _ COMMANDS: BOOL = TRUE-DCMAKE _ BUILD _ TYPE: STRING = Debug“-DCMAKE _ C _ COMPILER: FILEPATH = C: Program Files MinGW-w64 x86 _ 64-8.1.0-posx-seh-rt _ v6-rev0 mingw64 bin gcc.exe“-DCMAKE _ CXX _ COMPILER: FILEPATH = C: Program Files MinGW-w64 x86 _ 64-8.1.0-posx-seh-rt _ v6-rev0 mingw64 bin g + + . exe”-Hc:/code-Bc:/code/build-G“ MinGW Makefiles”

这个问题很老了,但是这里没有一个解决方案对我有用。我使用的是 VisualStudio2019,在我的例子中,C + + 编译工作正常,但是有一天坏了。

但是,我注意到 VisualStudioInstaller 中已经准备好安装一个更新。

在安装该更新、重新启动计算机和重新启动 VisualStudio 之后,所有 C + + CMake 问题都消失了。我不太确定为什么会这样,我只能推测,但我只能假设两件事中的一件发生了。要么安装这个更新修复了一个坏掉的安装,要么这个更新被悄悄地下载并在后台准备,在这个过程中破坏了一些东西。

我运行的是旧的 cmake 版本(即3.8) ,我使用的是 Visual Studio 16-2019。在更新了 cmake 版本之后,它确实检测到了编译器。

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

最后,单击[扫描工具包]