我目前正在使用“继承”代码,该代码具有(随机散布在各处)一大堆基于 Delphi 版本的条件编译器指令,可以追溯到 Delphi 2 。从现在开始,所有的开发都将使用 Delphi 2009 或未来。Delphi 2009 中是否有工具或插件可以根据指定的“最低”版本自动删除编译器条件代码段?
5 回答
我强烈推荐Delphi Inspiration Pascal Preprocessor (DIPP)
除了删除条件定义之外,这还可以对源文件做很多事情,包括包含文件的“内联”和删除注释(当然,所有这些都是高度可配置的,并且可以通过提供给处理器的选项来控制)。
条件定义功能特别有用,因为您既可以简单地删除所有此类条件,也可以提供一组您希望应用的 DEFINE。然后,DIPP 将发出一个源文件,该文件反映了编译器在这些符号 DEFINED 时的显示方式,但没有条件指令本身。
因此,在您的情况下,您只需定义适合您的“基线”Delphi 版本的符号。
你应该试试JCL中的 JEDI PreProcessor (Pascal PreProcessor)。
在我们 SVN 的主干中,可以在目录jcl/devtools/jpp中找到源代码,在我们最新版本 (2.1) 的 zip 文件中,可以在目录 devtools 中找到 jpp.exe。
我的建议是只更改您完全管理的代码。但是,如果您还打算修改现有的第 3 方代码,那么我建议您检查为验证而定义的每个 IFDEF。一些供应商不使用标准的 IFDEF VERxxx 调用,而是创建自己的调用,可能称为 VER70UP 等。最常见的地方是包含文件,因此在每个文件的开头附近寻找一个 {$I ???.INC} 文件,然后分析它使用什么以及如何使用。
分析每个 $DEFINE/$UNDEF 的另一个原因是,特定版本的定义可能会打开您以前未检查的新定义……最终导致死代码。
我不知道这样的工具,但编写它应该相对简单。
FindFirst
使用and遍历目录中的所有文件FindNext
- 用于
TStringList.LoadFromFile
读取所有的 pas 文件。 - 遍历字符串并查找
{$IfDef}
指令。如果条件部分中指定的版本早于 D2009,则删除所有文本,直到{$EndIf}
. - 用于
TStringList.SaveToFile
将修改后的文件写入磁盘。
使用GExperts,您可以使用 GrepSearch 或 GrepRegularExpressions 在您的代码中进行搜索,然后使用 GrepResults 中的 Replace 工具删除您需要的任何内容。
您可以对列表中的所有匹配项或仅选定的文件/匹配项执行搜索和替换操作。当您选择其中一个选项时,会出现一个对话框,提示您使用字符串来代替匹配的文本。请注意,由于 IDE 的限制,当前打开的表单无法替换其文本。请先关闭所有表单,然后再尝试替换其中的文本。