是否可以在Delphi2007中调用多个后期生成事件?

是否可以在Delphi2007中调用多个后期生成事件?,delphi,build,delphi-2007,build-events,Delphi,Build,Delphi 2007,Build Events,我正在尝试从Delphi2007项目的后期构建事件中运行两个cmd文件 生成事件的配置如下所示: ..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME) ..\copydlls.cmd $(OUTPUTDIR) ..\copydlls.cmd $(OUTPUTDIR) ..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME) 第一个很好用,第二个似乎从来没有被调用过 如果我像这样

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

生成事件的配置如下所示:

..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)
..\copydlls.cmd $(OUTPUTDIR)
..\copydlls.cmd $(OUTPUTDIR)
..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)
第一个很好用,第二个似乎从来没有被调用过

如果我像这样更改顺序:

..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)
..\copydlls.cmd $(OUTPUTDIR)
..\copydlls.cmd $(OUTPUTDIR)
..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME)
同样,只执行第一个

这是Delphi2007的已知限制/缺陷还是我在这里做错了什么? (我可以发誓,这在过去是行之有效的。)

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

%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文件,而是调用可执行文件。

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

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

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

您面临的问题可以通过调用
命令来理解

呼叫

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

换句话说,如果在执行子程序时忽略了调用,则当子程序返回时,父批处理程序将停止

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

更新


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

,这意味着构建事件是作为批处理程序执行的。有没有记录在案?我不确定有没有记录在案。我知道,在process explorer树状视图中看到cmd.exe进程作为bds.exe的子进程闪烁着进入生命是如此的重要。但我找不到这样的文件。不管怎样,你的观点很好,我在回答中认为这是理所当然的。我现在已经补救了。