如何实现对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>

通过上述步骤即可完成面向解决方案的库管理及配置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容