vs2012 转linux,Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程

MSBUILD的编译过程实际上是根据一系列的targets文件定义的,当我们在IDE执行生成、批生成、清理命令的时候,VS会查找这些命令对应的Task并执行它,下面我们逐个分析这个过程。

当执行生成操作时,MSBUILD将执行一个叫”Build”的任务,在targets文件中是这样定义的:

Name="Build"

Condition="‘$(_InvalidConfigurationWarning)‘

!=‘true‘"

DependsOnTargets="$(BuildDependsOn)"

Returns="@(ManagedTargetPath);@(WinMDFullPath)">

这里的BuildDependsOn定义为:

_PrepareForBuild;

$(BuildSteps);

AfterBuild;

FinalizeBuildStatus;

将BuildSteps扩展开:

== ‘‘">

ResolveReferences;

PrepareForBuild;

InitializeBuildStatus;

BuildGenerateSources;

BuildCompile;

BuildLink;

也就是说MSBUILD将依次执行这几个任务:

_PrepareForBuild;

ResolveReferences;

PrepareForBuild;

InitializeBuildStatus;

BuildGenerateSources;

BuildCompile;

BuildLink;

AfterBuild;

FinalizeBuildStatus;

但当我们的项目是使用Makefile编译的时候,并不需要让MSBUILD控制整个过程,因为这个过程已经在Makefile中完成了,我们只要重载Build这个任务就可以了。

Name="Build"

Condition="‘$(GNUProjectType)‘ == ‘UBoot‘

or‘$(GNUProjectType)‘ == ‘LinuxKernel‘ or ‘$(GNUProjectType)‘ == ‘LinuxMakeApp‘

"

>

TargetName="Build"

ProjectDir="$(ProjectDir)"

HostIp="$(HOST_IP)"

HostUser="$(HOST_USER)"

HostPasswd="$(HOST_PASSWD)"

Python2="$(PYTHON2_EXE)"

PythonFile="$(PythonFile)"

/>

当然,在此之前需要告诉MSBUILD,EmbedLinuxMakeTask这个任务在哪里:

这样当编译UBOOT、内核或者使用Makefile的应用程序时,MSBUILD将自动执行EmbedLinux.dll中定义的EmbedLinuxMakeTask这一任务!!

在这个任务的实现中,我们将执行由PythonFile指定的脚本,并将此脚本的输出重定向到VS的编译信息输出窗口中。这个脚本做为项目文件的一部分,需要完成编译和错误信息转换的功能。而SSH登录的操作则是一个通用的操作,放在任务的实现代码中。

EmbedLinuxMakeTask的执行过程为:

?  加载python2.exe

?  在PYTHON中写入VS中的环境变量

?  定义默认的编译和信息转换的行为

?  加载项目中指定的编译脚本,改写默认行为

?  开始执行登录操作

?  执行编译操作,在编译过程中完成错误信息的转换

?  返回Make的结果

原文:http://blog.csdn.net/lights_joy/article/details/41292081

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值