【问题标题】:Where do I define symbols tested with {$IFDEF}?我在哪里定义用 {$IFDEF} 测试的符号?
【发布时间】:2011-05-30 15:23:19
【问题描述】:

当我在代码中使用 Delphi 指令时,例如:

{$IFDEF something}
.
.
.
{$ENDIF}

在项目中我在哪里分配“某事”这个词?我在项目选项的某些地方尝试过,但没有奏效。我猜我没有找到正确的。

【问题讨论】:

  • 模块处理结束时忘记条件符号,阅读文档

标签: delphi delphi-2009 compiler-directives


【解决方案1】:

它位于 Project | 下的 Conditional Defines 槽中选项,在 D2010 上看起来像这样:

【讨论】:

  • 我猜 OP 之前曾尝试过在树视图中标记为“目录和条件”的设置,但没有意识到这些仅适用于资源编译器...... DELPHI 编译器本身并没有'没有明确突出显示的设置。当它第一次出现在我们身上时,我在“大大改进”的项目选项对话框中指出了这个 SNAFU。此对话框仍然是自 Galileo 以来 IDE 可用性方面最大的倒退之一。
  • 上面的截图和评论对我帮助很大——我在资源编译器部分摆弄了一段时间,我应该一直在寻找德尔福编译器。哇!
【解决方案2】:

其他答案为您指出了定义符号的位置以及不同方法的范围含义。

然而,尚未有人提及的是,如果您更改 DEFINE 符号,您必须完全构建您的项目,以便它们对您的代码产生任何影响。

当您“编译”时,Delphi 编译器只会编译自上次编译后自身发生变化的单元。如果您更改 DEFINE 符号,这不会更改任何项目单位,因此如果未重新编译这些单位,则 DEFINE 符号的更改将不会对这些单位产生任何影响。

要强制更改 DEFINE 符号以应用于所有单元,您必须“构建”,而不是编译。

这可以解释为什么您之前尝试设置定义似乎不起作用

【讨论】:

    【解决方案3】:

    您也可以在 {$DEFINE } 指令中定义它们。变化的是范围。当您在项目选项中的条件定义下定义 时,范围对整个项目都是全局的。 $DEFINE 指令仅在它们被声明到当前模块的末尾,或者直到遇到使用相同 的 $UNDEF 指令时才有效。使用什么取决于您的需求以及 IFDEF 的作用。

    【讨论】:

      【解决方案4】:

      您可以在两个地方放置在项目的所有单元中使用的条件定义:

      1. 在项目选项中(正如 David Heffernan 已经说过的)
      2. 在包含在所有这些单元中的包含文件中

      我为什么要提到第二个选项?因为它允许基于 VERxxx 条件定义和 1 中给出的其他条件定义进行专门处理。有关示例,请参见 jedi.inc(来自 Jedi JCL)。

      另外,正如 Deltics 所说:当它确定要重新编译哪些单元时,编译器只检查单元本身是否发生了变化,而不是条件定义或任何包含文件是否发生了变化。因此,如果您更改条件定义,您必须进行重建,而不仅仅是重新编译。由于 Delphi 编译器非常快,幸运的是这对编译时间没有太大影响。

      【讨论】:

        【解决方案5】:

        您可以在扩展名为 .inc 的外部文件中定义全局符号。 创建一个新的文本文件,将您定义的所有内容放入其中并将其另存为 Predefines.inc:

        --- Predefines.inc 文件的内容---

        {$DEFINE Symbol}
        {$IFDEF Symbol}
          {$DEFINE AnotherSymbol}
        {$ENDIF}
        

        在你的 Delphi 模块中,你需要检查是否定义了符号,把这段代码放在接口部分:

        interface
        
        {$I Predefines.inc}
        
        uses ...
        
        // Check you defines
        
        {$IFDEF Symbol}
        ...
        {$ENDIF}
        

        【讨论】:

        • 将条件定义放在纯文本 .inc 文件中对程序员来说更明显,也更容易管理。
        猜你喜欢
        • 2017-12-17
        • 2011-09-15
        • 2020-04-03
        • 1970-01-01
        • 2020-07-06
        • 1970-01-01
        • 2019-05-14
        • 1970-01-01
        • 2015-02-27
        相关资源
        最近更新 更多