MS是彻底抛弃makefile了,他新一代的build system 是MS Build.

MS是彻底抛弃makefile了,他新一代的build system 是MS Build.相当于,

MSBuild是 Microsoft Build Engine 的缩写,代表 Microsoft 和 Visual Studio 的新的生成平台。MSBuild 在如何处理和生成 软件方面是完全透明的,使开发人员能够在未安装 Visual Studio 的生成实验室环境中组织和生成产品。
MSBuild 引入了一种新的基于 XML 的项目 文件格式,这种格式容易理解、易于扩展并且完全受 Microsoft 支持。MSBuild 项目文件的格式使开发人员能够充分描述哪些项需要生成,以及如何利用不同的平台和配置生成这些项。另外,项目文件的格式还使开发人员能够创作可重用的生成规则,这些规则可以分解到不同的文件中,以便可以在产品内的不同项目之间一致地执行生成。以下各节描述了 MSBuild 项目 文件格式的一些基本要素。
MSBuild 编译后生成的是.exe 可执行文件,但却不能生成.msi 安装包文件。如果想要使用MSBuild 生成安装包文件,还需要借助WiX编辑一个wxs类型的工程。
从最原始的编译器,逐渐到 Shell 命令组合、Make工具,到现在的针对性 Build 工具,Rake、Ant、MSBuild,甚至于 PowerShell 这样的工具;都为我们软件开发以及系统管理做出了贡献,我甚至不能想象几十年前使用编译器生成程序的复杂步骤(其实就是把 makefile 拆开,相当恐怖)。

  探讨 Make、Ant 以及 MSBuild 无太多意义,甚至从纯技术和扩展性上来说,我认为 MSBuild 弱于 NAnt,但是软件并不是这么简单,之所以深研 MSBuild,M$ 作为后盾让人信任的无奈。

  本文主要讲述 MSBuild 的基本概念,以及如何使用它辅助开发。

  首先我们来看一个最简单的 Build:

 
    
< Project ToolsVersion ="3.5" DefaultTargets ="Build" xmlns ="http://schemas.microsoft.com/developer/msbuild/2003" > < PropertyGroup > < Welcome > Hello MSBuild! Welcome> Property> <Target Name="Build"> <Message Text="$(Hello)" /> Target> Project>


  假设我们把这个文件保存到 D:\build.proj ,然后在命令行切换工作目录到 D:\,运行 msbuild.exe(msbuild 默认直接运行当前目录下的 *.sln 或 *.*proj 文件),则命令行将会显示详细的 build 信息,当然也包括我们的消息 'Hello MSBuild!' 。 

概念

Project
  Project 代表一个 Build,有属性 ToolsVersion、DefaultTargets、 InitialTargets,分别为依赖的 MSBuild 版本、默认 Build 目标,初始化目标。

Property
  Property 是 MSBuild 中的基本单元,可以理解为变量,我们可以在大多数地方使用它作为 Task 的参数以完成我们预期的目标。
  下面的语句示范如何声明 Property:

 
     
< PropertyGroup > < Name Condition ="$(Name) == ''" > Kate Name> <WorkPath>D:\WorkspaceWorkPath> PropertyGroup>

  这里定义了两个 Property,我们可以使用 $(Name) 和 $(WorkPath) 来引用它们,就和前面的范例一样。
  Property 可以使用 MSBuild 的 /p 参数定义,这里就使用 Condition 属性判断是否存在外部 Name,如果不存在则使用自定义的 "Kate"。

Target
  Target 是 Build 的基本单元,也对应 MSBuild 的 /t 参数,可用参数有 DependOnTargets,代表依赖的目标。

Task
  Task 即任务,Build 的过程就是若干 Task 的执行。上面的  就是 MSBuild 内置的一个 Task,Text 则是参数。
  Task 可以使用 Condition 属性。
  通常情况下,MSBuild 自带的 Task 并不够用,有以下 MSBuild 扩展,可以几乎不需要自己写扩展:
  * MSBuild Community Tasks
  * SDC Tasks Library
  * MSBuild Extension Pack

Item
  我们可以简单的把 Item 理解为 .Net 中的 Dictionary> 类型,内层的字典被称作元数据表。

 

 
     
< ItemGroup > < Table Include ="A;B;C;D" /> < Game Include ="StarCraft" /> < Game Include ="WarCraft" /> < Game Include ="CoderCraft" /> < Program Include ="MyApp" > < Developer > Zealic Developer> <Timestamp>2009-01-01T11:22:33Timestamp> Program> ItemGroup>

  为方便理解,我们可以用 C# 来表述上述内容。
 
     
var Table = new Dictionary < string ,Dictionary < string , string > { { " A " , new Dictionary < string , string > }, { " B " , new Dictionary < string , string > }, { " C " , new Dictionary < string , string > }, { " D " , new Dictionary < string , string > } }; var Game = new Dictionary < string ,Dictionary < string , string > { { " StarCraft " , new Dictionary < string , string > }, { " WarCraft " , new Dictionary < string , string > }, { " CoderCraft " , new Dictionary < string , string > } } var Program = new Dictionary < string ,Dictionary < string , string > { { " MyApp " , new Dictionary < string , string > { " Developer " , " Zealic " , " Timestamp " , " 2009-01-01T11:22:33 " } } };

 

你可能感兴趣的:(MS是彻底抛弃makefile了,他新一代的build system 是MS Build.)