我正在研究一個基本的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