2010-01-09 32 views
3

我目前基于版本的Delphi,回到德尔福2一大堆条件编译指令已经(随机散落各处)“继承”代码工作。从现在开始,所有的开发都将与Delphi 2009或未来一起进行。 Delphi 2009中是否有一个工具,或者是一个插件,可以根据指定的“最小”版本自动删除编译器的条件代码段?删除德尔福IFDEF的编译器指令自动

回答

6

我强烈建议Delphi Inspiration Pascal Preprocessor (DIPP)

这可以做很多的事情,除了源文件删除有条件的定义,包括“内联”包括文件和删除注释(所有课程的高度可配置性和可控通过提供给处理器的选项)。

有条件的定义功能是非常有用的,你可以拥有所有这些条件句简单地删除或提供了一组定义你想申请的的。然后DIPP将发出一个源文件,反映它如何在编译器中出现符号DEFINED,但没有条件指令本身。

因此,在您的情况下,您只需简单定义适合您的“基准”Delphi版本的符号。

+0

+1为DIPP。不知道它,看起来很有趣! –

+0

看起来非常有用。干杯Jolyon – HMcG

1

我不知道这样的工具,但它应该是相对直接的写它。

  1. 遍历目录中的所有文件中使用FindFirstFindNext
  2. 使用TStringList.LoadFromFile读取所有PAS文件。
  3. 循环遍历字符串并查找{$IfDef}指令。如果在条件部分中指定的版本比D2009旧,请删除所有文本,直到{$EndIf}
  4. 使用将修改后的文件写入磁盘。
+0

不要忘记在寻找{$ ELSE}和{$ ELSEIF},如果你这样做。 –

+0

同上{$ if if defined(x)}可以使用哪个完整表达式 –

0

使用GExperts,您可以同时使用GrepSearch或GrepRegularExpressions在你的代码进行搜索,然后使用替换工具在GrepResults消除任何你需要的。

你可以做一个搜索和替换 列表或只选定的文件/比赛的所有比赛 操作。出现 当您选择这些选项之一, 一个对话框,提示为 字符串代替匹配 文字的使用。请注意,由于 IDE中的限制,当前打开的表格 不能替换其文本 。请在 之前关闭所有表格,试图替换其中的文字。

+1

Grep不能真的更像是一种编辑技巧。它不理解ifdef条件(如果定义了(y)和defined(x)},那么我会使用非手动的东西,我可以重试几次,比如SED) Only使用这样的东西时,完全没有其他选项 –

4

你应该给试试JEDI预处理器(Pascal预处理器)。

在我们的SVN的主干中,可以在目录jcl/devtools/jpp和我们的最新版本(2.1)zip文件中找到源文件,可以在目录devtools中找到jpp.exe。

1

我的建议是只更改您完全管理的代码。但是,如果你也要修改现有的第三方代码,那么我建议你通过每个为验证定义的IFDEF。一些供应商不使用标准的IFDEF VERxxx调用,但创建自己的可能被称为像VER70UP或类似的东西。最常见的地方是包含文件,因此在每个文件的开头附近查找一个{$ I ??? INC}文件,然后分析这个文件的使用方式和方式。

分析每个$ DEFINE/$ UNDEF的另一个原因是,特定于版本的版本可能会启用一个新的定义,您以前不会检查最终导致死代码的错误。