【问题标题】:Is it possible to call multiple post-build events in Delphi 2007?是否可以在 Delphi 2007 中调用多个构建后事件?
【发布时间】:2013-12-18 15:19:57
【问题描述】:

我正在尝试从 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 上的 this 答案中找到:

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

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

【问题讨论】:

    标签: delphi build delphi-2007 build-events


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      你所面临的问题可以从documentationcall命令中理解。

      致电

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

      也就是说,如果你在执行子程序时省略了call,那么当子程序返回时,父批处理程序就会停止。

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

      更新

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

      【讨论】:

      • 这意味着构建事件作为批处理程序执行。这在任何地方都有记录吗?
      • 我不确定它是否已记录在案。我知道在进程资源管理器树视图中看到 cmd.exe 进程作为 bds.exe 的子进程闪烁着生命是如此。但我找不到说明这一点的文档。无论如何,这是一个很好的观点,我在回答中认为这是理所当然的。我现在已经解决了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      相关资源
      最近更新 更多