设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

在Visual Studio构建和配置Boost(MSBuild)

2015-5-4 21:49| 发布者: joejoe0332| 查看: 5157| 评论: 0|原作者: Parser7SParser, 霍啸林, jince, king_dust, gones945, 无若, leoxu|来自: oschina

摘要: Boost 是一个非常流行地开源C++库。最近作为构建的一部分,我已经把它集成在Visual Studio中。仅仅使用Makefile项目和Command Line工具,要想完全正确地配置构建项目还是很困难的。Boost也一直指引着我发现所有相关 ...


拓展设置

拓展设置(ExtensionSettings)和 用户宏(UserMacro) 当前并不需要,所以我们可以设置它们为空:

1
2
<ImportGroup Label="ExtensionSettings" />
  <PropertyGroup Label="UserMacros" />

现在我们需要做的就是,为整个项目设置构建目标以及配置属性页。保留项目文件,并在单独的以.targets为后缀的文件中定义目标以及任务,这是一个好的编程风格。于是,我们创建boost.targets文件,并将它导入到项目之中。


导入

这是此刻我们所需的全部设置。接下来,为C++项目导入默认定义。这个导入不是必须的,属于“锦上添花”的事情:

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

拓展目标(ExtensionTargets)是我们添加代码到工程里面的地方。MSBuild 推荐为设置保留 .vcproj 文件,同时在 .targets 文件中定义目标(Targets)和任务(Tasks)。 我们将所有的代码移到boost.targets文件之中,并像这样引用它:

1
2
3
<ImportGroup Label="ExtensionTargets">
    <Import Project="boost.targets" />
  </ImportGroup>

这样我们的项目配置就完成了!


Targets

现在我们需要定义在构建的时候做什么,并且我们在定义目标时这样做。Visual Studio 已经建立了有一个预定义的目标集文件:BuildRebuild, 和 Clean

1
2
3
<Target Name="Build"   />
  <Target Name="Rebuild" />
  <Target Name="Clean"   />

上述定义可以分别执行构建,重建和清除操作。我们还记得以前我们构建boost,构建Jamfile工具b2.exe,如果在git库上克隆的在包含的目录下重新加载入'boost'。我们可以通过addind中的先决条件,用DependsOnTarget属性来构建目标。

1
2
3
<Target Name="Build"   DependsOnTargets="JamToolBuild;BoostHeaders;" >
<Target Name="Rebuild" DependsOnTargets="JamToolBuild;BoostHeaders;" >
<Target Name="Clean"   DependsOnTargets="JamToolBuild;" >

要构建Jamfile工具 b2.exe,我们需要执行本地路径"tools\build\src\engine\".下的build.bat文件。我们这样做的目标是构建JamTool:

1
2
3
4
5
6
7
8
9
<Target Name="BuildJamTool" Label="Building BJAM engine" >
     
    <Exec Command="call build.bat" ... />
     
    <ItemGroup Label="List of builtt exe files" >
      <BJamTools Include="*.exe" />
    </ItemGroup>
    <Copy SourceFiles="@(BJamTools)" DestinationFolder="$(BoostRoot)\" />
</Target>

这些目标执行build.bat并且复制*.exe文件到boost的根目录,我们可以运行build命令集。

如果从 Git 仓库克隆 boost 项目,那么 boost 目录所包含的所有文件都将丢失。想要填入它丢失的信息,我们需要执行像"b2.exe headers"这样的 Jam 工具。我们将这个过程放在 BoostHeaders target 中做:

1
2
3
<Target Name="BoostHeaders" DependsOnTargets="JamToolBuild" >
  <Exec Command="b2.exe headers" />
</Target>

注意,这个过程依赖于 b2.exe 已经被创建完成。因此我们添加 DependsOnTargets="JamToolBuild"这句话来确认 b2.exe 被创建并且可以被执行。

现在我们准备创建整个库:

1
2
3
4
5
6
7
8
9
<Target Name="Build" DependsOnTargets="JamToolBuild;BoostHeaders;" >
  <Exec Command="b2.exe" WorkingDirectory="$(BoostRoot)" />
</Target>
 
<Target Name="Rebuild" DependsOnTargets="BuildJamTool;">
  <Exec Command="b2.exe -a"    WorkingDirectory="$(BoostRoot)\" />
</Target>
 
...

现在就要做最有趣的部分:配置 Boost 且把这些配置信息整合到 Visual Studio 属性系统中。

配置

为了将 Boost 集成进 Visual Studio,我们需要创建允许我们设置所有构建选项和开关的属性页。我们可以通过创建带 ProjectSchemaDefinition 和 Rule 的 XML 文件来做到这点。

用户界面

我在我的其它文章里深入地阐述了这一话题:第一部分第二部分第一部分介绍了属性页的架构(schema),第二部分描述了如何将这些元素加入到一个属性页中。

我们先创建 boost.xml 并将其添加到项目中。当我们把所有属性都添加进去后,就能看到这样的界面:

该页将允许我们设置在 Jamroot 中提及的构建选项。如果选项未被定义(单元格留空),构建器将使用设置在 Jamfile 中的默认值。每个配置的设定项都被分开存储,互相完全独立。


值得注意的是,每个设定项都有一个像下面这样的简短描述,用于描述它的功能。如果要查看更多信息可以按 F1 键,在打开的 URL 中有更深入的讲解。

我个人最爱的是 Output Verbosity 设定项:

它允许你选择在构建时显示信息的多少和内容。这些等级在 b2 的默认帮助画面上是隐藏的,通常看不到它们。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部