使用 CMake 为 VS 2017 生成解决方案的问题

新手上路,请多包涵

所以我昨天安装了 Visual Studio 2017。我还安装了支持 VS 2017 的 CMake 3.7.2。

我的 VS 安装是使用 Game development with C++ 工作流 + 一些其他组件:

个人组件

我还添加了 CMake 的东西(但我认为我什至不需要它 - 因为我使用 CMake 作为独立工具来生成 VS 解决方案)和 MSBuild(我有 msbuild.exe 甚至在添加该组件之前 - 所以不确定该附加组件究竟做了什么)。

使用 VS 2015,我能够从正常的命令提示符处运行 cmake . 以获得解决方案。

在 VS 2017 中,工作流程发生了变化——我读过 Microsoft 的这篇文章

所以我尝试了以下方法:

  • 我打开了 Developer Command Prompt for VS 2017 并从中运行 cmake . -G "NMake Makefiles" 。然后运行 cmake --build . 正确编译所有内容。
  • 当我在提示符中尝试以下操作时: cmake . -G "Visual Studio 15 2017 Win64" 强制创建解决方案时出现以下错误:
   -- The C compiler identification is unknown
  -- The CXX compiler identification is unknown
  CMake Error at CMakeLists.txt:3 (project):
    No CMAKE_C_COMPILER could be found.
  CMake Error at CMakeLists.txt:3 (project):
    No CMAKE_CXX_COMPILER could be found.
  -- Configuring incomplete, errors occurred!

我还尝试使用 vswhere.exe 设置环境并运行 vcvarsall.bat 像这样:

“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat”amd64

而且我只能生成 NMake 文件而不是解决方案。

那么我怎样才能得到解决方案呢?

为什么 cl.exe 报告 Version 19.10.25017 当它在 VC\Tools\MSVC\14.10.25017\bin

原文由 onqtam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.3k
2 个回答

将我的评论变成答案

错误 -- The CXX compiler identification is unknown - No CMAKE_CXX_COMPILER could be found. 基本上意味着 CMake 无法编译简单的测试程序(它总是作为识别/验证编译器的一部分)。

您可以查看 CMakeFiles\CMakeError.log (相对于您的二进制输出目录),错误原因应该在那里。

到目前为止我遇到的两个可能的原因:

  1. 缺少管理员权限。您可以尝试从具有管理权限的 shell 再次运行它,以交叉检查您的 Visual Studio 是否设置为需要管理员权限。

  2. 缺少 Windows SDK。验证您的 SDK 安装,例如检查您是否安装了任何资源编译器。它应该在类似于以下的路径中:

    C:\Program Files (x86)\Microsoft SDKs\Windows\v[some version]\bin\RC.Exe

Visual Studio 2017 安装

请注意,即使您选择了其中一个 C++ 预定义包(例如我使用了 Desktop development with C++ 然后在 Individual Components 下添加了更多包,Visual Studio 也可能 不会 安装所有必需的 C++ 包。 --- 选项卡)。

这是对我有用的选择(VS2017 社区版,Windows 10):

在此处输入图像描述

如果您有使用 MFC/ATL 库的项目,则需要将其添加到 SDKs, libraries, and frameworks 子类别下:

在此处输入图像描述

参考

原文由 Florian 发布,翻译遵循 CC BY-SA 3.0 许可协议

根据我的经验,这个 CMake 工作流问题的“基础”是(在这种情况下)真正 具有误导性 的错误消息“找不到 CMAKE_C[XX]_COMPILER”。

CMakeError.log 是关键:我在那里看到了“…Cl.exe /c…”,所以找到了编译器(并执行了)

我的问题是 缺少 ucrt。 lib (虽然Win10 SDK在那里;复制,而不是“安装”,我的错)。

原文由 tombom81 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题