【发布时间】:2014-07-05 10:15:03
【问题描述】:
我正在努力让 Log4D 在 Delphi XE4 中工作,并且遇到了一些编译错误,因为它在 uses 子句中找不到 Contnrs,除非我将它移到定义它的 ifdef 之外。
{$IFDEF DELPHI5_UP}
Contnrs,
{$ENDIF}
稍作调查发现 ifdef 是在一个包含的文件 Defines.inc 中定义的,该文件对每个“支持”的 delphi 版本都有一个块,该块会停止几个版本:
例如:
{$IFDEF VER170} { Delphi 2005 }
{$DEFINE DELPHI9}
{$DEFINE DELPHI4_UP}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$ENDIF}
{$IFDEF VER180} { Delphi 2006 }
{$DEFINE DELPHI10}
{$DEFINE DELPHI4_UP}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
因此,尽管继续复制和粘贴 Delphi 2006 的 ifdef 并创建一个 Delphi XE4 块很容易......这似乎是一个不雅的解决方案。这绝对不是未来的证明...现在每个新版本都必须更新此文件,因此 Delphi 4 中不存在的一些代码不会使其他人 15 年以上的旧代码爆炸。
所以我想知道是否有更好的方法来进行条件编译,这样它在编译该行时确实只检查您是否有“Delphi 5 或更高版本”,而不是这种需要更新每个新版本的 delphi 的格式出来了。
【问题讨论】:
-
我这样做,但我在一个 .inc 文件中这样做。
${IF CompilerVersion >= 17}{$DEFINE DELPHI_2005_UP}{$ENDIF}打字少得多。而且我更喜欢通过我的实际代码输入{$IFDEF DELPHI_2005_UP}This{$else}That{$endif}。 -
{$IF}是在 Delphi 6 中引入的。如果您需要在 Delphi 5 或更早版本中编译,则必须将{$IF}语句包装在{$IFDEF CONDITIONALEXPRESSIONS}块中。
标签: delphi conditional-compilation