[英]Is it possible to control the Windows SDK version in Windows Kits?
[英]Removing dependency on Windows SDK version
我正在嘗試編譯MPIR(Windows友好版本的GMP)。 我安裝了Visual Studio 2017,所以它應該工作,但我收到此錯誤消息:
C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\IDE\\VC\\VCTargets\\Microsoft.Cpp.WindowsSDK.targets(46,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [C:\\mpir\\msvc\\vs17\\lib_mpir_gc\\lib_mpir_gc.vcxproj]
我特別需要達到可以在任何機器上編譯的程度,而不僅僅是這個,所以在這台機器上安裝那個精確的SDK版本並不能解決問題。 我需要更改一些內容才能使用Visual Studio 2017進行構建。
查看C:\\mpir\\msvc\\vs17\\lib_mpir_gc\\lib_mpir_gc.vcxproj
,我找到了這一行:
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
這看起來很有希望,但刪除它沒有任何效果; 錯誤消息保持不變。
我可以更改什么來消除此錯誤?
總結我相信這一點的理由應該是可能的:
如果你編寫一個C ++程序,比如在最簡單的場景中,在一個名為foo.cpp
文件中,並使用命令行編譯器cl foo.cpp
編譯它,它將自動編譯並鏈接當前Visual Studio使用的任何SDK版本安裝以生成foo.exe
(除非你使用了一些非常專業的API,僅在以后的Windows版本中可用)在至少Vista上的任何Windows上運行。
這與msbuild調用的cl.exe
完全相同。 所以我不是要求新的功能。 相反,正在生成上面的錯誤消息,因為出事讓開,打破了默認的“它只是工作”方案,並鎖定添加到特定SDK版本。 我問如何刪除鎖定並返回默認情況,它只適用於Visual Studio附帶的任何SDK版本。
正如評論所述,這是不可避免的。
如果使用Windows 8.1 SDK構建,則會獲得在Windows 8.1 或更高版本上運行的版本。 如果使用Windows 10 SDK構建,則可以將其功能限制為Windows 8,或者可以選擇Windows 10版本(例如1607)。 當然,如果您選擇一個新的SDK來使用新的Windows 10功能,則無法在Windows 8.1上運行它而錯過了該功能。
但是,如果您不選擇Windows SDK,那么您將構建哪個Windows版本? 您將使用哪個<windows.h>
?
[編輯]對於可移植的C ++程序,它們顯然不包含<windows.h>
,並且它們不直接與Windows API鏈接。 相反,這些依賴於Microsoft的C ++標准庫(又名MSVCRT)的實現
[edit2]我剛算過,我的Visual Studio 2017安裝(15.7.5)有12個不同的SDK選項。 確實,有些是針對ARM的,但這只是基本前提的變體:您選擇的SDK會影響您可以運行生成的應用程序的計算機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.