Delphi 2007(或2009)的构建事件与构建配置有关吗?

5
在Delphi 2007中,是否可以仅为特定的构建配置添加构建事件?我使用2007版本,但也想了解在2009版本中可以做什么。祝好,Sam。
4个回答

5

是的!

由于每个构建配置都可以拥有单独的定义,因此您可以检查项目定义以进行条件性构建处理。

我通常会使用类似以下的方式:

echo $(DEFINES) | find "RELEASE"> nul
if not errorlevel 1 goto
release

echo $(DEFINES) | find "DEBUG" > nul
if not errorlevel 1 goto debug

goto end

:release
echo Processing RELEASE Build:
...
goto end

:debug
echo Processing DEBUG Build:
..
goto end

:end

这个方法可行且比第一个解决方案容易得多。请注意,其中一行应该写成“if not errorlevel 1 goto release”,但除此之外,它的效果与广告宣传的一样。 - Мסž
嗯,无法在XE2中使其工作:我总是得到“命令[...]以代码1退出。”并且没有任何块被执行。虽然我可以看到$(DEFINES)宏已经被正确扩展了... - Oliver Giesen

3

编号。

在Delphi 2009中,您可以为每个构建配置设置(资源)编译器设置。但是这不适用于其他设置。

您可以伪装它,但需要一些时间:

  1. 在预构建中,删除conf * .dcu文件。
  2. 为调试配置定义DEBUG。
  3. 将以下内容添加到项目文件中:

代码:

uses
  ..
{$IFDEF DEBUG}
  confDebug,
{$ELSE}
  confRelease,
{$ENDIF}
  ..
  1. 现在让发布构建步骤检查confDebug.dcu或confRelease.dcu的存在,以找到使用哪个构建配置。

这有点繁琐,但您可以做您想要的。


简短回答:不。更长的回答:是的。 :-) - Wouter van Nifterick
1
解决方案和hack之间有区别。但也许我有点吹毛求疵 ;-). - Toon Krijthe
谢谢Gamecat。虽然这不是一个好的解决方案,但我很惊讶Delphi不支持基于配置的不同构建事件,非常感谢您提供的信息。 - SamH
@samhowley,CodeGear正在忙于处理Borland“缺乏关注”的积压问题。我希望像这样的功能在未来的版本中得到修复。(他们的计划是解决大约100个小烦恼)。 - Toon Krijthe

2

试试这个:

if $(Config) == Release do_something

这里可以找到一些额外的信息。


0

当使用XE时,我将其缩小到了更简单的东西,如果你感兴趣的话:

goto $(Config)

:Release
compil32 /cc f:\dev\MyProject\Installer\MyProject.iss"
etc.

:Debug

只有在将构建配置设置为“发布”时,才会构建我的安装程序。如果你想更高级一些,可以调用Jenkins并让它接管预发布任务。在Delphi 10.x中,你不再需要这个技巧了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接