如何實(shí)現(xiàn)對(duì)Visual Studio 2010的庫(kù)管理支持

概述

Vcpkg使用起來(lái)確實(shí)比較方便,基本上是免工程配置,但是現(xiàn)在只支持Visual Studio 2015及以上版本,那么,是否有可能支持Visual Studio 2010呢?或者說(shuō)支持各種Visual Studio版本?

局限從何而來(lái)

之前講過(guò),Vcpkg能夠整合到Visual Studio 2015上是因?yàn)橛蠱SBuild擴(kuò)展點(diǎn)可以導(dǎo)入配置,擴(kuò)展點(diǎn)在:

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

那么,如果能夠找到Visual Studio 2010對(duì)應(yīng)的MSBuild擴(kuò)展點(diǎn),就可以實(shí)現(xiàn)對(duì)應(yīng)的庫(kù)管理器。

Visual Studio 2010的擴(kuò)展點(diǎn)

任意打開(kāi)一個(gè)Visual Studio 2010的工程,在工程配置頁(yè)簽打開(kāi)宏,輸入custom,即可看到:

擴(kuò)展點(diǎn)

也就是說(shuō),Visual Studio 2010的MSBuild也是支持?jǐn)U展的,具體位置在:

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

MicrosoftCommonTargets之前和之后都可以插入對(duì)應(yīng)的.Targets。

支持Visual Studio 2010庫(kù)的方法

  1. Vcpkg的triplet可以修改為[x86/x64]-windows-[v100/v140]-static類(lèi)似這種組合方式;
  2. portfile.cmake腳本中可以根據(jù)VCPKG_TOOLSET得到對(duì)應(yīng)的Visual Studio版本,然后執(zhí)行對(duì)應(yīng)的構(gòu)建流程;
  3. 在整合Visual Studio時(shí),根據(jù)不同的版本寫(xiě)入調(diào)整不同的.targets文件來(lái)實(shí)現(xiàn)任何版本的庫(kù)配置導(dǎo)入;
  4. 根據(jù)不同的toolset和platform合成不同的triplet,來(lái)保證庫(kù)導(dǎo)入正確。

延伸

如果不需要全局庫(kù)管理,僅僅是針對(duì)于對(duì)應(yīng)的sln或者vcxproj,從上述擴(kuò)展思路延伸來(lái)看,可以實(shí)現(xiàn)局部庫(kù)管理:

  1. 根據(jù)約定統(tǒng)一存放依賴(lài)庫(kù)的include、library和binary
  2. 編寫(xiě)librarys.targets文件來(lái)完成庫(kù)導(dǎo)入
  3. 編寫(xiě)與sln和vcxproj同名的.targets文件
    使用$(MSBuildThisFileDirectory)獲取當(dāng)前路徑來(lái)保證相對(duì)位置:
<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的擴(kuò)展點(diǎn)導(dǎo)入.targets
    譬如,導(dǎo)入與sln路徑下同名的庫(kù)配置:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(SolutionPath).targets" Condition="Exists('$(SolutionPath).targets')" />
</Project>

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容