【问题标题】:CMake does not find Visual C++ compilerCMake 找不到 Visual C++ 编译器
【发布时间】:2015-10-15 15:26:57
【问题描述】:

在之前的项目上安装 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.exeC:\Program Files\Microsoft Visual Studio 14.0,但找不到。

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

【问题讨论】:

  • 可能2015年的安装路径不是CMake所期望的?您使用哪个版本的 CMake?另外,我不知道 CMake 的 Windows 版本,但是 CMake 可能会在 PATH 中查找它需要的程序,所以如果它没有更新,那么它就找不到编译器。跨度>
  • 我正在使用声称支持 Visual Studio 2015 的 cmake 版本 3.2.3
  • 使用版本3.2.x,我在VS2015之前安装Cmake时遇到了这个问题,所以重新安装cmake为我解决这个问题
  • 有时您只是忘记重新启动计算机,或者在安装或更新 Visual Studio 后不想重新启动。在这种情况下,CMake 将找不到您的编译器。

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


【解决方案1】:

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

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

【讨论】:

  • 酷,这个答案给了我线索。我使用我的 VS2015 ISO 安装 C++ 组件并解决了问题。
  • 我也使用 VS2015 ISO 安装,它只安装了基本的 vb/c# 部分。不得不再次启动 ISO 来修改和安装其他 c++ 东西。
  • 你们到底安装了哪些包/组件/东西?我创建了一个 Visual C++ / Win32Project,它安装了两个组件,在 VS 中运行良好,但 cmake 仍然像以前一样抱怨。谢谢。 -S
  • 太好了!
  • 这也适用于 vs 2017 - 多么奇怪的事情!谢谢你的提示,伙计!
【解决方案2】:

这是对我有用的解决方案:

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

希望它可以正常运行。

【讨论】:

  • 我认为您不需要以管理员身份运行 VS 命令提示符。但是运行 VS 命令 promt 确实会将 cmake 正在寻找的所有内容放在路径上。根据您安装 CMake 的方式(是否将其放在路径上),您还可以导航到构建目录并从那里运行 cmake ..。无论如何都赞成,因为例如 git-bash 终端不会自动将所有内容放在其路径上。这对我有帮助!
  • 这似乎更像是一种变通方法而不是解决方案,因为通常情况下,IDE 生成器不需要在 dev 命令提示集中找到的各种环境变量(如果你是使用 makefile 生成器或类似工具,例如 Ninja)
  • 更新:在 Windows 10 上,这称为 Developer Command Prompt
  • 很奇怪的解释:1:不叫VS Studio命令提示符2:“navigate”,你是说用“cd”命令? 3:你的意思是,运行 cmake-gui?正如您在步骤 5 中所说的“单击”按钮 4:继续?你的意思是填写? 5:在配置窗口的下拉框中,我可以选择VS编译器,但是C&C++编译器还是未知...
  • 顺便说一句,只要输入 search cmake 你就会找到 cmake-gui
【解决方案3】:

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

我搜索发现this answer将Microsoft SDKs bin中的RC.Exe和RcDll.Dll复制到VC bin中,然后CMake就起作用了。


编辑:The top answer to another question 表明这是一个 PATH 问题,因此确保 Microsoft SDK bin 在您的 PATH 中就足够了。

【讨论】:

    【解决方案4】:

    那些在 Visual Studio 2017 上遇到这个问题的人:有一个与 CMake 相关的功能需要选择并与相关的编译器工具集一起安装。请参阅下面的屏幕截图。

    【讨论】:

    • 2015 版怎么样?我在 2015 安装中找不到此复选框。一种解决方案可能是更新到 2017...
    • @DrumM,这是专门针对 Visual Studio 2017 的。我认为 VS 2015 中不存在该功能。
    • 你确定这是必要的吗?不只是为了在 Visual Studio 中使用 CMake 吗?
    • @PeterMortensen:它为我解决了这个问题。同样,Visual Studio 2017。
    【解决方案5】:

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

    【讨论】:

    • 这也是我的问题。这很令人困惑,因为 Visual Studios 2015 是第 14 版!
    • 请注意,您可能需要删除缓存才能更改 VS 的版本。为此,请单击文件>删除缓存。
    • 这有助于...最好的版本控制!
    • arrrg,@PaulWintz 谢谢你的提醒。我认为在我的情况下,我使用干净的 cmake 缓存运行 cmake,但是当 VisualStudio 等待我重新启动计算机以完成 VS 更新时,然后 cmake 巧妙地缓存了糟糕的情况。
    【解决方案6】:

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

    我使用了错误的-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". ...

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

    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 很高兴。

      【讨论】:

        【解决方案8】:

        Menu → Visual Studio 2015 → MSBuild Command Prompt for Visual Studio 2015。然后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.txt 的路径并执行:

        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。您可以通过修改“VS2015 x64 Native Tools Command Prompt”来指定 SDK 版本,以通过在命令行参数的末尾添加 at 来强制 8.1 sdk,如下所示; "%comspec% /k ""C:\Program Files (x86)\msdev2015\VC\vcvarsall.bat"" amd64 8.1"
        • 我是否必须单独安装“MSBuild Command Prompt for Visual Studio 2015”?我安装了 msvc 2017,但没有 Visual Studio 的命令提示符。
        【解决方案9】:

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

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

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

        【讨论】:

          【解决方案10】:

          我在 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,现在问题消失了。

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

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

              Visual Studio 2017 软件包:

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

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

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

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

                    -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=
                    

                    在设置之后我走得更远,但后来我遇到了更多问题(所以我假设我的环境不知何故搞砸了),但也许它会帮助解决这个问题的人。

                    【讨论】:

                      【解决方案16】:

                      几个提示:

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

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

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

                      然后一切都按预期进行。

                      【讨论】:

                        【解决方案17】:

                        就我而言,问题在于父项目,其中包括 googletest via

                        add_subdirectory(gtest_dir)
                        

                        被定义为

                        PROJECT( projname CXX )
                        

                        不知何故,CMake 无法识别

                        PROJECT(sub_project_name CXX C)
                        

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

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

                        PROJECT( projname CXX C)
                        

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

                        【讨论】:

                          【解决方案18】:

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

                          堆栈溢出帖子Fatal error LNK1104: cannot open file 'gdi32.lib'

                          【讨论】:

                            【解决方案19】:

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

                            当我按下配置按钮时指定 Visual Studio 14 时,它起作用了。

                            【讨论】:

                            • Visual Studio 的版本编号很奇怪。 Visual Studio 14 实际上是 Visual Studio 2015,没有 Visual Studio 2014。见 trophygeek 的回答 stackoverflow.com/a/40332976/1319284
                            【解决方案20】:

                            我在 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 并将您复制的两个文件粘贴到其中。

                            仅此而已,希望对您有所帮助...

                            【讨论】:

                              【解决方案21】:

                              如果发现 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。

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

                              您可以选择删除 cmakelists.txt 中的选项 C 和 CXX,方法是设置 enable_language(C) 所在位置的 #infront。并避免编译 Android ARM 处理器。

                              【讨论】:

                                【解决方案22】:

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

                                【讨论】:

                                • 不建议使用仅链接的答案。
                                【解决方案23】:

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

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

                                【讨论】:

                                  【解决方案24】:

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

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

                                  该错误表示未安装 XP (v140_xp) 的构建工具。为了修复它,我在 Visual Studio 2019 安装程序中的单个组件选项卡下安装了正确的功能:

                                  【讨论】:

                                    【解决方案25】:

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

                                    【讨论】:

                                      【解决方案26】:

                                      检查名称文件夹是否太长

                                      【讨论】:

                                        【解决方案27】:

                                        这个问题很老,但这里没有一个解决方案对我有用。我正在使用 Visual Studio 2019,就我而言,C++ 编译工作正常,但一天就坏了。

                                        但是,我注意到在 Visual Studio 安装程序中准备安装更新。

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

                                        【讨论】:

                                          【解决方案28】:

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

                                          【讨论】:

                                            【解决方案29】:

                                            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"

                                            【讨论】:

                                            • 请附上一些关于这如何帮助解决问题的描述。
                                            【解决方案30】:

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

                                            【讨论】:

                                              猜你喜欢
                                              • 2016-12-19
                                              • 2019-10-31
                                              • 2015-06-27
                                              • 2017-05-07
                                              • 2016-10-25
                                              • 1970-01-01
                                              • 2017-12-03
                                              相关资源
                                              最近更新 更多