我正试图在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
之外使用MinGW
和WSL
(Windows Subsystem for Linux
(成功编译了这个项目。如何告诉Visual Studio
我的体系结构是64-bit
和amd64
(?(。除了使其编译之外,还需要什么?运行配置设置为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.txt
或Visual 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头文件。