3

我正在尝试从 Delphi 2007 项目的构建后事件中运行两个 cmd 文件。

构建事件配置如下:

..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)
..\copydlls.cmd $(OUTPUTDIR)

第一个工作正常,第二个似乎根本没有被调用。

如果我像这样更改顺序:

..\copydlls.cmd $(OUTPUTDIR)
..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)

同样,只执行第一个。

这是 Delphi 2007 的已知限制/错误还是我在这里做错了什么?(我可以发誓这在过去是有效的。)

编辑:我找到了一种解决方法:

%comspec% /c ..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)
%comspec% /c ..\copydlls.cmd $(OUTPUTDIR)

这按预期工作。还是很奇怪。

EDIT2:还有另一种选择,我在 StackOverflow 上的这个答案中找到:

call ..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)
call ..\copydlls.cmd $(OUTPUTDIR)

我猜(没有尝试过),只有当构建事件是一个 cmd 文件并且我上面引用的过去的经验没有调用 cmd 文件而是可执行文件时,这才是一个问题。

4

2 回答 2

3

我想我在 EDIT2 中添加的解决方法是应该使用的解决方法,所以我自己添加这个作为答案:

调用 cmd 文件(也可能是 bat 文件)时,必须在其前面添加“调用”:

call ..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)
call ..\copydlls.cmd $(OUTPUTDIR)
于 2013-12-18T15:32:53.470 回答
0

您所面临的问题可以从该命令的文档中理解。call

称呼

在不停止父批处理程序的情况下从另一个批处理程序调用。

换句话说,如果call在执行子程序时省略,则父批处理程序在子程序返回时停止。

因此,您必须使用call来执行构建操作中的子程序。

更新

我第一次没有提到这个,但上面隐含的是构建操作由命令解释器 cmd.exe 执行。

于 2013-12-18T15:36:13.937 回答