msbuild如何决定使用哪些工具?

时间:2012-08-21 15:43:06

标签: msbuild-4.0

我正在尝试设置新的TeamCity代理。

我的新座席正在致电: C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ x86_amd64 \ CL.exe

现有座席正在呼叫: C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ AMD64 \ CL.exe

就我而言,现有代理正在做正确的事情,因为它们都是64位主机并构建64位二进制文​​件。两者都使用相同的参数调用msbuild(删除细节以保护无辜者): C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe(xxxx.sln / clp:PerformanceSummary / p:Configuration = Release / p:Platform = x64)

我找到了这个博客:http://blogs.msdn.com/b/aaronhallberg/archive/2007/07/16/msbuild-property-evaluation.aspx,它解释了msbuild如何评估属性。但我不知道用什么属性来决定这些工具。

您可能想知道为什么我关心工具选择。无论哪种情况,CL调用都会成功(您可以在64位窗口下运行32位编译)。但是在新的代理上,我在预编译的头文件中遇到错误“预编译的头文件来自以前版本的编译器,或者预编译的头文件是C ++,你从C使用它(反之亦然)” - 并且预编译的标头正由相同的AMD64 \ CL.exe使用。

因此,如果有人知道msbuild实际使用了哪些道具,那么这将有助于我解决这个问题。

作为旁注,我在工作站上的VC ++目录,可执行目录下的Visual Studio项目属性页中看到交叉编译器(x86_amd64 \ CL.exe)。哪个是Win 7,64bit。它说它是继承的,我没有自定义msbuild道具(在C:\ Users \ bdelavega \ AppData \ Local \ Microsoft \ MSBuild \ v4.0中)。为什么这是默认值?

1 个答案:

答案 0 :(得分:0)

这篇文章解释了msbuild在从VS 2010调用时默认使用交叉编译器,并且有一个命令行开关来覆盖它。

http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/d6b352ea-12b6-4867-b86d-a052fbab1da4

这不是完整的答案,但它足以克服我的问题。