MSBuild //Visual Studio生成系统

以下部分引用自https://www.cnblogs.com/shanyou/p/3452938.html

MSBuild是Visual Studio的生成系统,可以简单的理解为Visual Studio的编译器,它能解释构造文件,执行构造动作,生成工程文件

MSBuild所解释的项目文件已XML架构定义,依靠XML文件来指示生成引擎生成哪些内容以及如何生成这些内容。

简单列一下MSBuild XML架构元素https://msdn.microsoft.com/zh-cn/library/5dy88c2e(v=vs.120).aspx元素

Element child Elements Attributes
Choose Element(MSBuild)

Otherwise

When

--
Import Element(MSBuild) --

Condition

Project

ImportGroup Element(MSBuild) Import Condition
Item Element(MSBuild) ItemMetaData

Condition

Exclude

Include

Remove

ItemDefinitionGroup Element(MSBuild) Item Condition
ItemGroup Element(MSBuild) Item Condition
ItemMetadata Element(MSBuild) Item Condition
OnError --

Condition

ExecuteTargets

OtherWise Element(MSBuild)

Choose

ItemGroup

PropertyGroup

--
Output Element(MSBuild) --

Condition

ItemName

PropertyName

TaskParameter

Parameter Element(MSBuild) --

Output

ParameterType

Required

ParameterGroup Element(MSBuild)

Parameter --
Project Element(MSBuild)

Choose

Import

ItemGroup

PorjectExtensions

PropertyGroup

Target

UsingTask

DefaultTargets

InitialTargets

ToolsVersion

TreatAsLocalProperty

xmlns

ProjectExtensions Element(MSBuild) -- --
Property Element(MSBuild) --

Condition

PropertyGroup Element(MSBuild) Property Condition
Target Element(MSBuild)

OnError

Task

AfterTargets

BeforeTargets

Condition

DependsOnTargets

Inputs

KeepDuplicateOutputs

Name

Outputs

Returns

Task Element(MSBuild) Output

Condition

ContinueOnError

Parameter

TaskBody Element(MSBuild) Data Evaluate
UsingTask Element(MSBuild)

ParameterGroup

TaksBody

AssemblyFile

AssemblyName

Condition

TaskFactory

TaskName

When Element(MSBuild)

Choose

ItemGroup

PropertyGroup

Condition
  • Project元素

这是每一个项目文件的最外层元素,它表示了一个项目的范围,不可或缺。

注意它的子元素Targets和属性DefaultTargets,有些人把它的DefaultTargets看成目标,把Targets看成任务,我觉得这样子理解很到位。

  • Property元素

在项目中一些经常访问的信息,以name/value的形式存放之后,可以以$(PropertyName)的形式访问。name即元素名,value即元素值

可以用$()引用自定义的属性,也可以引用系统的环境变量,以及MSBuild保留属性

属性除了可以在项目文件中声明是赋值外,在MSBuild命令行也允许设置属性的值

MSBuild condition.xml /p:Platform=x64//以这种方式修改的属性值会覆盖xml里面的属性值
  • Item元素

在整个项目文件中你需要提供一些可被引用的输入性资源信息,比如源代码文件、引用的程序集名称、需要嵌入的图标资源等。我们可以引用自定义的一些元数据(以键/值对的形式存储),还可以调用一些隐式存在的元数据,即不用声明即可使用,可以看看https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-4.0/ms164313(v=vs.100)

  • Target元素

Target表示一个需要完成的虚拟的任务单元。每个Project可以包括一个或多个Target,从而完成一系列定制的任务。

http://www.cnblogs.com/linianhui/archive/2012/09/01/2666104.html

这里面谈到了它的任务是原子操作(简单理解,某个操作不会被其它任务打断),但是xml格式的项目文件没有这个处理能力,所以这些任务都是映射到.NET类的,这些类处理操作中的逻辑。具体来说都是实现ITask接口的类,这位笔者用的C#,我想这当然可以采用c++,但是我没有去证实,时间太紧了。

  • Import元素

用来导入可重用的项目文件,这位笔者把它看成是占位元素,是很有道理的,就是实际在执行的时候,会被立即替换,注意和Item元素的区分,他们的作用是不同的

 

  • MSBuild会用到一些特殊字符http://www.cnblogs.com/linianhui/archive/2012/09/01/2666104.html

%:引用元数据//%(元数据名)

$:引用属性//$(属性名)

@:引用项(item)

':条件或其它表达式

;:列表分隔符

?:文件名通配符

*:文件名通配符

以及XML的保留字符:<、>、&、"、'

MSBuild条件:condition属性以及一些bool表达式


Debug

 

有了对以上一些顶级元素的初步了解,我们来看一个实际的.vcxprohttps://blog.csdn.net/huhaoxuan2010/article/details/76797588



  
    
      Debug
      Win32
    
    
      Debug
      x64
    
    
      Release
      Win32
    
    
      Release
      x64
    
  
  
    {2B4C8F7A-A827-41E5-B80A-8EE6C0D3AF03}
    Win32Proj
    test
  
  
  
    Application
    true
    v120
    Unicode
  
  
    Application
    true
    v120
    Unicode
  
  
    Application
    false
    v120
    true
    Unicode
  
  
    Application
    false
    v120
    true
    Unicode
  
  
  
  
  
    
  
  
    
  
  
    
  
  
    
  
  
  
    true
  
  
    true
  
  
    false
    E:\osvr-build-ok\boost_1_62_0;$(IncludePath)
    E:\osvr-build-ok\boost_1_62_0\lib64-msvc-12.0;$(LibraryPath)
  
  
    false
    E:\osvr-build-ok\boost_1_62_0;$(IncludePath)
    E:\osvr-build-ok\boost_1_62_0\lib64-msvc-12.0;$(LibraryPath)
  
  
    
      Use
      Level3
      Disabled
      WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)
      true
    
    
      Console
      true
    
  
  
    
      Use
      Level3
      Disabled
      WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)
      true
    
    
      Console
      true
    
  
  
    
      Level3
      Use
      MaxSpeed
      true
      true
      WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)
      true
    
    
      Console
      true
      true
      true
    
  
  
    
      Level3
      Use
      MaxSpeed
      true
      true
      WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)
      true
    
    
      Console
      true
      true
      true
    
  
  
    
  
  
    
    
  
  
    
      Create
      Create
      Create
      Create
    
    
  
  
  
  

 

你可能感兴趣的:(MSBuild)