【问题标题】:"No Target Architecture" compilation error in Visual Studio using CMake使用 CMake 的 Visual Studio 中的“无目标体系结构”编译错误
【发布时间】:2019-05-02 18:31:37
【问题描述】:

我正在尝试在Visual Studio 中编译我的C++ CMake 项目。但是,我收到以下错误消息:

#error:  "No Target Architecture"   C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt   C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um\winnt.h  154

我检查了我的代码,我从不包括 winnt.h,但我包括 windows.h so this rules out the solution of never including winnt.h

这是引发错误的winnt.h代码sn-p:

//
// TODO: WOWXX - Unblock ARM. Make all alignment checks DWORD for now.
//

#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif !defined(RC_INVOKED)
#error "No Target Architecture"
#endif

我之前在Visual Studio 之外使用MinGWWSL (Windows Subsystem for Linux) 成功编译了这个项目。我如何告诉Visual Studio 我的架构是64-bitamd64 (?)。除了使其编译之外还需要什么?运行配置设置为x64-Debug。包含stdafx.h 是不可能的,因为找不到头文件。我也在使用Boost,但可以通过将以下行添加到我的CMakeLists.txt 来正确解决:

set(BOOST_ROOT "C:/local/boost_1_69_0_b1_rc3")

【问题讨论】:

  • 您当前的 CMake 命令是什么?你在使用cmake -G "Visual Studio 15 2017 Win64" .. 吗?
  • @Chris:我使用Visual Studio 构建函数。使用诊断输出,我得到了以下构建命令:"C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\ENTERPRISE\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\CMake.exe" --build "C:\Users\User\CMakeBuilds\9da55f70-6c9e-9f39-9d9d-49fcd309f582\build\x64-Debug" --target MyProject --config Debug -- "-v"
  • 是的,您仍在使用我提到的cmake 命令,您的输出似乎没有将生成器-G "Visual Studio 15 2017" 设置为win64。我不熟悉 Visual Studio 构建功能是什么。您是否看到任何允许您将解决方案平台切换到 64 位的设置?
  • --target MyProject 似乎有点奇怪,为了确定,您确实定义了一个名为“MyProject”的特定目标,对吧?

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


【解决方案1】:

由于错误消息提到了我的一个文件(例如file_operations.hI decided to define the architecture inside it using the following macro

#define _AMD64_ 1

这解决了问题,但我相信通过配置 CMakeLists.txtVisual Studio 存在“更好”的解决方案。

【讨论】:

    【解决方案2】:

    我认为这应该由-DCMAKE_GENERATOR_PLATFORM=x64解决

    【讨论】:

      【解决方案3】:

      未指定错误是在配置项目时发生还是在项目已配置并且您正在尝试构建时发生。

      这可能是您的 Visual Studio 安装的问题,因为您似乎没有在命令行中使用 cmake,而是使用 Visual Studio 中内置的 cmake。

      在这两种情况下,cmake 都会运行以验证是否可以构建有效的程序。

      在 Visual Studio 中创建一个新的 CMake 项目,它将创建一个带有 CMakeLists.txt 文件的通用 c++ 项目。当您构建此项目时,它将运行编译器检测阶段、项目配置和构建。在我的系统上,x86-Debug 的默认设置将其切换为 x64-Debug,它将再次为 x64 架构执行该过程。

      我个人认为捆绑的 CMake 界面非常混乱,我不使用它。它还使用较旧的 CMake 和 Ninja 工具。

      如果这一切正常,则说明出现了其他问题,您需要包含完整的错误消息。完整的错误消息将显示包含文件的链,并且可能会指出您是否使用了错误的 windows 头文件。

      【讨论】:

        猜你喜欢
        • 2011-06-18
        • 1970-01-01
        • 2020-04-03
        • 1970-01-01
        • 2017-11-11
        • 2019-11-29
        • 1970-01-01
        • 2019-05-18
        相关资源
        最近更新 更多