是否可以在Delphi 2007中调用多个后期构建事件?

时间:2013-12-18 15:19:58

标签: delphi build delphi-2007 build-events

我正在尝试从Delphi 2007项目的post-build事件中运行两个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上的this回答中找到了:

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

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

2 个答案:

答案 0 :(得分:3)

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

调用cmd文件(可能还有bat文件)时,必须在其前添加“call”:

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

答案 1 :(得分:0)

call命令的documentation可以理解您遇到的问题。

  

拨打

     

从另一个批处理程序调用而不停止父批处理   程序

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

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

<强>更新

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