【问题标题】:Removing Delphi IFDEf compiler directives automatically自动删除 Delphi IFDEf 编译器指令
【发布时间】:2010-01-09 11:52:12
【问题描述】:

我目前正在使用“继承”代码,该代码具有(随机散布在各处)一大堆基于 Delphi 版本的条件编译器指令,可以追溯到 Delphi 2 。从现在开始,所有的开发都将使用 Delphi 2009 或未来。 Delphi 2009 中是否有工具或插件可以根据指定的“最低”版本自动删除编译器条件代码段?

【问题讨论】:

    标签: delphi delphi-2009 compiler-directives


    【解决方案1】:

    我强烈推荐Delphi Inspiration Pascal Preprocessor (DIPP)

    除了删除条件定义之外,这还可以对源文件执行许多操作,包括包含文件的“内联”和删除 cmets(当然,所有这些都是高度可配置的,并且可通过提供给处理器的选项进行控制)。

    条件定义功能特别有用,因为您既可以简单地删除所有此类条件,也可以提供一组您希望应用的 DEFINE。然后,DIPP 将发出一个源文件,该文件反映了编译器对这些符号的定义,但没有条件指令本身。

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

    【讨论】:

    • 看起来很有用。干杯 Jolyon
    【解决方案2】:

    你应该试试JCL中的JEDI PreProcessor(Pascal PreProcessor)。

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

    【讨论】:

      【解决方案3】:

      我不知道有这样的工具,但编写它应该相对简单。

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

      【讨论】:

      • 如果你这样做,别忘了留意 {$ELSE} 和 {$ELSEIF}。
      • 同上 {$if defined(x)} 可以制作完整的表达式
      【解决方案4】:

      我的建议是只更改您完全管理的代码。但是,如果您还打算修改现有的第 3 方代码,那么我建议您检查为验证而定义的每个 IFDEF。一些供应商不使用标准的 IFDEF VERxxx 调用,而是创建自己的调用,可能称为 VER70UP 等。最常见的地方是包含文件,因此在每个文件的开头附近寻找一个 {$I ???.INC} 文件,然后分析它正在使用什么以及如何使用。

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

      【讨论】:

        【解决方案5】:

        使用GExperts,您可以同时使用GrepSearch 或GrepRegularExpressions 在您的代码中搜索,然后使用GrepResults 中的替换工具删除您需要的任何内容。

        您可以进行搜索和替换 对所有匹配的操作 列表或仅选定的文件/匹配。 当您选择其中一个选项时, 出现一个对话框,提示您输入 用来代替匹配的字符串 文本。请注意,这些表格是 目前打开不能有他们的文字 更换,由于限制 IDE。请先关闭所有表格 试图替换其中的文本。

        【讨论】:

        • Grep 不能真的更像是一种编辑技巧。它不理解 ifndef 条件(如果你有 $if defined(y) 和 defined(x) } (即使那样我也会使用非手动的东西,我可以重试几次,比如 SED)。只使用东西像这样当完全没有其他选择时
        猜你喜欢
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 2013-07-19
        • 1970-01-01
        • 2010-09-27
        • 2010-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多