当前位置: 代码迷 >> 综合 >> incredbuild,msbuild 命令行调用实现自动化编译
  详细解决方案

incredbuild,msbuild 命令行调用实现自动化编译

热度:32   发布时间:2023-12-13 12:59:33.0

一、MSBuild.exe实现自动化编译

        .net Framework 提供的 MSBuild 工具可以方便我们在没有安装 Visual Studio 2005 的系统中编译项目解决方案,当然还可以与用相关工具组合进行 DailyBuild。

先看一个例子,在解决方案目录(Test.sln)命令行输入下面的命令,将会自动编译解决方案。

[cpp]  view plain copy
  1. MSBuild.exe Test.sln  /t:Rebuild  /M:1 /p:Configuration=Debug|Release  /fl  /flp:FileLogger,Microsoft.Build.Engine;logfile=Build.log;errorsonly;Encoding=UTF-8  

常用参数说明:
/t:Rebuild|Clearn 生成目标
/p:Configuration=Debug|Release 项目属性

/m[:number] 指定Building时最大并发进程数

/fl 输出Build日志
/flp:FileLogger,Microsoft.Build.Engine;logfile=Build.log;errorsonly;Encoding=UTF-8 指定日志记录的额外参数,如仅打印error日志,使用UTF-8编码格式
/clp:PerformanceSummary 显示任务、目标和项目花费的时间


参考资料:

1.MSDN关于MSBulid的参数的最全资料:http://msdn.microsoft.com/en-us/library/vstudio/ms164311.aspx

2.http://blog.csdn.net/gamecreating/article/details/5186439



二、IncrediBuild的命令行接口——BuildConsole.exe实现自动化编译

IncrediBuild(分布式编译或称联合编译)的命令行调用:
BuildConsole是IncrediBuild的命令行接口,例如:

[cpp]  view plain copy
  1. BuildConsole.exe test.sln /prj="*" /rebuild /All  /Log=test.log /OpenMonitor /cfg="Debug|Win32,Release|Win32"  

这里表示编译test.sln解决方案的所有工程,若编译失败其他工程继续编译,打印build日志,打开编译监视器,编译配置的版本为Debug|Win32,Release|Win32。


常用参数说明:
/prj :要编译什么工程(一个解决方案中可能有多个工程),工程名用逗号隔开,支持*和?通配符
/build :就是编译
/rebuild:就是clean & build

/All  正常情况下一个工程编译失败IncrediBuild就会停止编译,加上这个参数后会忽略编译失败的工程继续编译其他工程
/OpenMonitor:会把编译过程窗口打开
/cfg:编译条件选择

BuildConsole的返回值:

0:成功

1:操作过程中发生错误

2:严重错误,如无效参数、未发现输入文件等

3:编译完成前被停止



例如写一个bat,使用BuildConsole进行自动化编译,并根据返回值判断是否编译成功:

[cpp]  view plain copy
  1. BuildConsole test2.sln /prj="*" /rebuild /OpenMonitor /cfg="Win32|Debug"  
  2.   
  3. IF %ERRORLEVEL% NEQ 0 pause  

上面的 %ERRORLEVEL% 即可获得返回值(这个方法找了好久!)


参考资料:

1.IncrediBuild官网关于BuildConsole.exe的最全介绍:http://www.incredibuild.com/webhelp/BuildConsole.html



三、MSBuild命令移植为BuildConsole命令举例:

举例:

[cpp]  view plain copy
  1. MSBuild.exe Test.sln  /t:Rebuild  /M:1 /p:Configuration=Debug|Release  /fl  /flp:FileLogger,Microsoft.Build.Engine;logfile=Build.log;errorsonly;Encoding=UTF-8  
对应的BuildConsole命令:

[cpp]  view plain copy
  1. BuildConsole Test.sln /prj="*" /rebuild /cfg="Debug|win32,Release|win32" /Log=Build.log /All  
  2. IF %ERRORLEVEL% NEQ 0 pause  
唯一的问题是BuildConsole的日志输出命令中不支持“errorsonly”,所以打印的日志跟output窗口输出的内容一样,所以的编译信息都有,不像加了 “errorsonly”的MSBuild输出的日志信息非常简单。


打完收工~~