预定义符号用于选择Lazarus和Delphi之间的区别

8

我正在寻找一个预定义的符号,用于编写如下代码:

{$IFDEF LAZARUS}
// code compiles by fpc/lazarus
{$ELSE}
// code compiles by delphi
{$ENDIF}
2个回答

14

使用FPC

{$IFDEF FPC}

1
“FPC”是由编译器定义的,而不是IDE。因此,对于所有使用FPC作为编译器的IDE来说,它都是正确的。 - David Heffernan
1
是的,我认为没有指令可以检测IDE。毕竟,IDE只是一个增强版的记事本,用于输入代码。 - GolezTrol
2
我正在将一个单元测试项目移植到Lazarus,并需要在“uses”子句中使用不同的单元名称。DUnit实现是特定于IDE的。 - kludg
1
@Arioch:从XE2开始(或者可能是XE,我忘了),Delphi编译器开始为自身定义“DCC”条件。在此之前,没有定义条件来识别Delphi编译器,除非通过特定版本的“VERxxx”条件间接识别。 - Remy Lebeau
1
@GolezTrol:这并不像在Delphi中那么简单,因为你可能有一些与IDE本身相关的代码,例如:当你使用ToolsAPI时。 - az01
显示剩余7条评论

1

对于GUI应用程序,据我所知,“LCL”符号是在Lazarus项目中定义的。在这种情况下,这可能并不重要。

一般来说,对于更大的代码库,我会避免在源代码中有太多的ifdef FPC/LCL和ifdef。这使得添加异常或其他版本变得更加困难。

使用像JCL和Zeos(7)这样的系统,其中您为大多数差异命名一个自己的名称(例如“USE_FPCUNIT”或“USE_DUNIT”),并将这些链接到中央包含文件中的版本。

关于这个主题的简短论文,请参见http://www.stack.nl/~marcov/porting.pdf(第2章)

P.s. 我认为Pocketstudio、TP、GPC、VP和WDSybil(以及我忘记的任何东西)在大多数实际目的上都已经死亡了,而字节码变体Canterbury Pascal/Component Pascal/Oxygene/Prism/Delphi.NET不兼容(大多数都比Pascal更接近Oberon)。这基本上只剩下Delphi、Kylix和FPC需要担心了。


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