"No Target Architecture"使用 CMake 的 Visual Studio 中的编译错误



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

#error:  "No Target Architecture"   C:Program Files (x86)Microsoft Visual Studio2017EnterpriseCommon7IDECMakeLists.txt   C:Program Files (x86)Windows Kits10include10.0.17763.0umwinnt.h  154

我检查了我的代码,我从来没有包括winnt.h,但我包括windows.h,所以这排除了从不包括winnt.h的解决方案。

这是它抛出错误的winnt.h代码片段:

//
// 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")

由于错误消息提到了我的一个文件(例如file_operations.h(,我决定使用以下宏定义其中的体系结构:

#define _AMD64_ 1

这解决了问题,但我相信通过配置CMakeLists.txtVisual Studio可以找到"更好"的解决方案。

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

如果在配置项目时或在配置项目并尝试构建时发生错误,则未指定。

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

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

在Visual Studio中,创建一个新的CMake项目,它将创建一个带有CMakeLists.txt文件的通用c++项目。当您构建此项目时,它将贯穿编译器检测阶段、项目配置和构建。在我的系统上,x86调试的默认值将其切换为x64调试,并且对于x64体系结构,它将再次经历该过程。

我个人认为捆绑的CMake界面非常混乱,我没有使用它。它也使用了旧的CMake和Ninja工具。

如果这一切都起作用,那么是其他地方出了问题,您需要包含完整的错误消息。完整的错误消息将显示包含文件链,并可能确定您是否使用了错误的windows头文件。

相关内容

最新更新