如何實現對Visual Studio 2010的庫管理支持

概述

Vcpkg使用起來確實比較方便,基本上是免工程配置,但是現在只支持Visual Studio 2015及以上版本,那么,是否有可能支持Visual Studio 2010呢?或者說支持各種Visual Studio版本?

局限從何而來

之前講過,Vcpkg能夠整合到Visual Studio 2015上是因為有MSBuild擴展點可以導入配置,擴展點在:

$(MSBUILDLOCATION)/Microsoft.Cpp/v4.0/V140/ImportBefore/Default/

那么,如果能夠找到Visual Studio 2010對應的MSBuild擴展點,就可以實現對應的庫管理器。

Visual Studio 2010的擴展點

任意打開一個Visual Studio 2010的工程,在工程配置頁簽打開宏,輸入custom,即可看到:

擴展點

也就是說,Visual Studio 2010的MSBuild也是支持擴展的,具體位置在:

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

MicrosoftCommonTargets之前和之后都可以插入對應的.Targets

支持Visual Studio 2010庫的方法

  1. Vcpkg的triplet可以修改為[x86/x64]-windows-[v100/v140]-static類似這種組合方式;
  2. portfile.cmake腳本中可以根據VCPKG_TOOLSET得到對應的Visual Studio版本,然后執行對應的構建流程;
  3. 在整合Visual Studio時,根據不同的版本寫入調整不同的.targets文件來實現任何版本的庫配置導入;
  4. 根據不同的toolset和platform合成不同的triplet,來保證庫導入正確。

延伸

如果不需要全局庫管理,僅僅是針對于對應的sln或者vcxproj,從上述擴展思路延伸來看,可以實現局部庫管理:

  1. 根據約定統一存放依賴庫的include、library和binary
  2. 編寫librarys.targets文件來完成庫導入
  3. 編寫與sln和vcxproj同名的.targets文件
    使用$(MSBuildThisFileDirectory)獲取當前路徑來保證相對位置:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Generate By pkgUser" AfterTargets="AfterBuild">
        <Message Text="*** author:liff.engineer@gmail.com ***" Importance="high"/>
    </Target>
    <Import Condition="Exists('$(MSBuildThisFileDirectory)..\..\config\librarys.targets')" Project="$(MSBuildThisFileDirectory)..\..\config\librarys.targets"/>
</Project>
  1. 使用Visual Studio的擴展點導入.targets
    譬如,導入與sln路徑下同名的庫配置:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(SolutionPath).targets" Condition="Exists('$(SolutionPath).targets')" />
</Project>

通過上述步驟即可完成面向解決方案的庫管理及配置。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容