我正在研究一个基本的makefile文件,以测试编译我们的备用Microsoft环境(如Windows Phone)的源代码。我打开了一个VS2012 ARM开发人员命令提示符,并在makefile上运行nmake
。这导致:为什么ARM的cl.exe尝试从ARM开发人员命令行构建x86或x64应用程序?
nmake /f makefile.namke
...
cl /c cryptlib.cpp cpu.cpp...
cryptlib.cpp
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\crtdefs.h(338):
fatal error C1189: #error: Compiling Desktop applications for the ARM platform is not supported.
cpu.cpp
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\crtdefs.h(338):
fatal error C1189: #error: Compiling Desktop applications for the ARM platform is not supported.
...
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\VC\BIN\x86_ARM\cl.EXE"' : return code '0x2'
Stop.
“桌面应用程序”是种暧昧的,所以我搜索微软的术语的含义。看来,这意味着工具链构建基于x86或x64 Metro UI的应用程序。
我觉得我正在遭受断开连接,或者微软正在遭受断开连接,他们的工具也有问题。
为什么微软的ARM版本cl.exe试图构建x86或x64应用程序而不是为ARM编译?或者为什么VS2012 ARM Developer Command Prompt设置为x86或x64应用程序?
我也尝试修复问题,但提出的解决方案不工作。所以现在我想了解最高级别的情况。
例如,one answer说要将<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
添加到ARM属性表中,但这不起作用。 Another answer说要加CXXFLAGS = /D _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
,但那也没用。
这个makefile就像测试微软ARM工具链下的编译一样简单。
LIB_SRCS = cryptlib.cpp cpu.cpp ...
LIB_OBJS = cryptlib.obj cpu.obj ...
TEST_SRCS = test.cpp bench1.cpp bench2.cpp ...
TEST_OBJS = test.obj bench1.obj bench2.obj ...
CXX = cl.exe /nologo
AR = lib.exe
CXXFLAGS =
all: cryptest.exe
cryptest.exe: $(TEST_OBJS) cryplib.lib
$(CXX) $(CXXFLAGS) /ref:cryplib.lib /out:[email protected] $(TEST_SRCS)
cryplib.lib : $(LIB_OBJS)
$(CXX) $(CXXFLAGS) $(LIB_SRCS)
$(AR) $(LIB_OBJS)
_“...添加'CXXFLAGS =/D _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE',但那也行不通。“_ - 你的意思是字面意思,还是将其定义为非零?该标题的第337行检查其值,而不仅仅是它的存在。文件是否使用了一些在ARM上被任意禁用的Win32 API?在我遇到的每个例子中,“Desktop”总是指传统的Win32,即不是WinRT或UWP。 – Notlikethat