天天看點

成功實作在Visual Studio 2013中使用MSVC 2015編譯器,平台工具集可見(★firecat推薦★)

網上大量的部落格都是講述如何在高版本的VS使用低版本的編譯器,例如電腦已經安裝了VS2017,但是不想安裝低版本的VS2015/VS2013/VS2010等,同時又想用低版本的編譯器。這類的部落格實在太多,方法我就不贅述了。然而我的這篇部落格......

是的,你沒有看錯标題,就是實作在Visual Studio 2013中使用MSVC 2015編譯器!即VS低版本使用高版本編譯器!

本人的電腦安裝了完整版的VS2013,但是沒有安裝VS2015。如何實作高版本的編譯器和調試器呢?以下是實作的過程:

一、安裝Microsoft Build Tools 2015

1、Visual Studio的編譯引擎是MSBuild,它提供了一套項目檔案(.csproj,.vbproj, vcxproj)的XML的Schema,用來指定如何處理和編譯項目。MSBuild也是一個MIT License的開源軟體,可以在Github上看到它的倉庫。

當然MSBuild不依賴于Visual Studio,完全可以在不安裝Visual Studio的情況下使用MSBuild。

在連結

https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/

,找到了可再發行元件和生成工具:

Microsoft Visual C++ 2015 Redistributable 更新 3

Microsoft 生成工具 2015 更新 3

我們順序安裝。需要注意的一點是,在安裝VS2015的生成工具(即MSBuild)的時候,請選擇預設安裝,預設的是winSDK 8.1。(但是如果想安裝MFC的檔案和庫檔案就需要自定義安裝。)

visualcppbuildtools_full.exe預設是線上安裝,我們也可以設定成離線安裝,帶上本地磁盤路徑:

visualcppbuildtools_full.exe /layout d:\vs2015

安裝完成之後,C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0會有V140檔案夾。

V120對應的是VS2013;V140對應的是VS2015;

成功實作在Visual Studio 2013中使用MSVC 2015編譯器,平台工具集可見(★firecat推薦★)

在系統盤路徑下執行DOS指令,可以檢視都安裝了哪些MSBuild.exe:

C:\>dir /s /b /d  MSBuild.exe

2、關于MSBuild的微軟官方文檔:

使用指令行中的 MSVC 工具集

https://docs.microsoft.com/zh-cn/cpp/build/building-on-the-command-line https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild C/C++ 生成參考 https://docs.microsoft.com/zh-cn/cpp/build/reference/c-cpp-building-reference 3、安裝完MSBuild,為什麼VC++項目屬性頁顯示的是英文?解決辦法請參見我的另一篇部落格: https://blog.csdn.net/libaineu2004/article/details/89599523

二、将自定義工具內建到項目屬性

1、建立VS2013 Win32控制台程式,以ConsoleApplication1命名為例:工程建完之後,進入工程所在檔案夾,記事本打開(或者直接在工程界面->解決方案->右鍵菜單->解除安裝項目->編輯)ConsoleApplication1.vcxproj,修改如下(關注紅色字型):

<?xml version="1.0" encoding="utf-8"?>

<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

 <ItemGroup Label="ProjectConfigurations">

   <ProjectConfiguration Include="Debug|Win32">

     <Configuration>Debug</Configuration>

     <Platform>Win32</Platform>

   </ProjectConfiguration>

   <ProjectConfiguration Include="Release|Win32">

     <Configuration>Release</Configuration>

 </ItemGroup>

 <PropertyGroup Label="Globals">

   <ProjectGuid>{9D4C4AD6-BE26-49CD-90C3-78954404E222}</ProjectGuid>

   <Keyword>Win32Proj</Keyword>

   <RootNamespace>ConsoleApplication1</RootNamespace>

   <VCTargetsPath>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\</VCTargetsPath>

   <TargetPlatformVersion>8.1</TargetPlatformVersion>

   <TargetFrameworkVersion>v4.0.30319</TargetFrameworkVersion>

 </PropertyGroup>

 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

   <ConfigurationType>Application</ConfigurationType>

   <UseDebugLibraries>true</UseDebugLibraries>

   <PlatformToolset>v140</PlatformToolset>

   <CharacterSet>Unicode</CharacterSet>

 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

   <UseDebugLibraries>false</UseDebugLibraries>

   <WholeProgramOptimization>true</WholeProgramOptimization>

2、(1)請特别要注意變量VCTargetsPath,它的初始值在系統資料庫有定義,路徑是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\12.0

VCTargetsPath=$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V120\'))

預設指向了VS2013的工作路徑,這裡在*.vcxproj檔案裡修改為MSVC 2015:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\

千萬小心,字元串V140後面還有個"\"字元,這個字元可别遺漏了,否則後果不堪設想......

(2) <TargetFrameworkVersion>v4.0.30319</TargetFrameworkVersion>  這句話可有可無

要確定版本号與C:\Windows\Microsoft.NET\Framework\v4.0.30319一緻。

修改完畢後,就可以重新打開工程,進行MSVC 2015編譯了。如圖所示,工程是屬性頁可以看到平台工具集裡面新增了編譯器

“Visual Studio 2015(v140)”,其中“未安裝”三個字不必理會它,不影響使用。(#^.^#)

成功實作在Visual Studio 2013中使用MSVC 2015編譯器,平台工具集可見(★firecat推薦★)

(3)記事本打開ConsoleApplication1.sln檔案,修改VisualStudioVersion為:

VisualStudioVersion = 14.0.24720.0

3、由于是VS2013的緣故,點選F7生成解決方案時,仍然會執行VS2013版本的MSBuild.exe,但是請放心,MSBuild最終會調用VS2015的編譯器來編譯源碼。

MSBuildToolsPath = C:\Program Files (x86)\MSBuild\12.0\bin\amd64\

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\12.0

MSBuildToolsPath = C:\Program Files (x86)\MSBuild\12.0\bin\

三、斷點調試

1、由于是VS2013的緣故,點選F5啟動調試時,仍然會執行VS2013版本自帶的調試器。!囧!這個就沒有辦法切換成VS2015調試器了。除非放棄使用VS自帶的調試器,轉而使用WinDbg。本地路徑是C:\Program Files (x86)\Windows Kits\8.1\Debuggers。

2、使用VS2013調試2015編譯生成的程式,會出現可視化檔案*.natvis不比對的情況,畢竟編譯器不同了,比如VS2015在C++ STL方面有較大改進。

VS2013實時調試器(JIT:Just In Time):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

Debugger = "C:\Windows\system32\vsjitdebugger.exe" -p %ld -e %ld

VS2013的調試器路徑是:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger

可視化檔案在:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers

解決可視化檔案*.natvis不比對的方法請參見我另一篇部落格:

https://blog.csdn.net/libaineu2004/article/details/89503132

3、VS調試時,隻使用自己帶的調試器,不會使用WinDbg。WinDbg可以提供外部使用,安裝方法如下:

安裝用于程式調試的WinDbg調試器,微軟官方把WinDbg調試器隐含到Windows SDK 8.1中了,是以要安裝Windows SDK。

下載下傳連結:

https://developer.microsoft.com/en-us/windows/downloads/sdk-archive

選擇Windows 8.1版本安裝,注意隻需要裝Debugging Tools for Windows。

筆者注:我是全部完整地安裝了Windows SDK 8.1。

4、關于debugger的微軟官網文檔:

怎麼用調試器

https://docs.microsoft.com/zh-cn/visualstudio/debugger/debugging-in-visual-studio 在 Visual Studio 調試器中指定符号 (.pdb) 和源檔案 (C#, C++,Visual Basic 中, F#) https://docs.microsoft.com/zh-cn/visualstudio/debugger/specify-symbol-dot-pdb-and-source-files-in-the-visual-studio-debugger
成功實作在Visual Studio 2013中使用MSVC 2015編譯器,平台工具集可見(★firecat推薦★)
四、附錄

-Visual Studio 2010 - #Visual Studio 10
-Visual Studio 2012 - #Visual Studio 11
-Visual Studio 2013 - #Visual Studio 12
-Visual Studio 2015 - #Visual Studio 14
-Visual Studio 2010 - VisualStudioVersion=10
-Visual Studio 2012 - VisualStudioVersion=11
-Visual Studio 2013 - VisualStudioVersion=12
-Visual Studio 2015 - VisualStudioVersion=14
-Visual Studio 2008 - ToolsVersion 3.5
-Visual Studio 2010 - ToolsVersion 4.0
-Visual Studio 2012 - ToolsVersion 4.0
-Visual Studio 2013 - ToolsVersion 12.00
-Visual Studio 2015 - ToolsVersion 14.00      
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
# Visual Studio 12
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1      

繼續閱讀