Linker 无法很好地处理自定义生成工具

Linker 无法很好地处理自定义生成工具,linker,visual-studio-2015,incredibuild,Linker,Visual Studio 2015,Incredibuild,我有一个visualstudio解决方案,我正试图使用creditbuild工具来构建它。解决方案中的两个项目协同工作——第一个项目(我们称之为“项目A”)构建一个可执行文件(foo.exe),它可以解析第二个项目(“项目B”)中的数据文件以生成一些头文件 显然,存在对项目B中定义的项目a的依赖关系。如果我在项目B上使用IncredBuild的“重建项目”选项,它将正确构建项目a,并且成功构建foo.exe。项目B有一个自定义的生成工具文件,该文件应使foo.exe与它应该解析的文件的命令行参数

我有一个visualstudio解决方案,我正试图使用creditbuild工具来构建它。解决方案中的两个项目协同工作——第一个项目(我们称之为“项目A”)构建一个可执行文件(foo.exe),它可以解析第二个项目(“项目B”)中的数据文件以生成一些头文件

显然,存在对项目B中定义的项目a的依赖关系。如果我在项目B上使用IncredBuild的“重建项目”选项,它将正确构建项目a,并且成功构建foo.exe。项目B有一个自定义的生成工具文件,该文件应使foo.exe与它应该解析的文件的命令行参数一起运行。但是,尝试以这种方式启动foo.exe始终会返回错误:

自定义构建:

跑鞋

“可执行文件\foo.exe的路径”未被识别为内部或外部路径 外部命令、可操作程序或批处理文件

C:\程序文件 (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.cppcomon.targets(171,5): 错误MSB6006:“cmd.exe”已退出,代码为9009

有趣的是,如果我使用IncredBuild只生成项目B(即使用build Project选项),那么一切都正常-它正确地从上一个失败的生成中生成foo.exe的位置拾取foo.exe。这让我觉得,至少这条路应该是好的

有人能提出为什么在重建过程中无法运行可执行文件吗?是否存在时间问题,例如项目B在文件系统知道foo.exe之前启动

它都在VisualStudio的常规(重新)构建下工作。只是不可信的构建重建失败了。请注意,所有这些都是通过VisualStudioIDE完成的,而不是通过命令行完成的


编辑:这是我正在使用的CreditBuild的免费版本(Visual Studio附带的版本),因此所有的构建都在本地计算机上。

最后我联系了Xoreax技术支持,他们告诉我这是一个“罕见但已知的问题,与我们的一个额外加速功能有关”

他们的第一个建议是编写一个简单休眠“几毫秒”的可执行文件,并将其作为自定义构建工具post链接的一部分运行。这确实解决了眼前的问题,但我正在构建的解决方案也有许多类似的问题,在任何地方添加这种延迟都很快变得单调乏味,并不总是有效。不管怎么说,这感觉像是一种软糖

所以我问是否可以将这种行为切换为关闭,而且确实可以。在Visual Studio中,IncredBuild菜单有一个代理设置选项,从调用的对话框的Visual Studio Builds | Advanced页面中,可以简单地取消选中使用无序任务生成来提高吞吐量


案例结束。

在构建过程中,可以选择如何卸载或拦截自定义工具。尝试查看“c:\ProgramFiles(x86)\IncredBuild\Samples”