【发布时间】:2011-05-30 15:23:19
【问题描述】:
当我在代码中使用 Delphi 指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
在项目中我在哪里分配“某事”这个词?我在项目选项的某些地方尝试过,但没有奏效。我猜我没有找到正确的。
【问题讨论】:
-
模块处理结束时忘记条件符号,阅读文档
标签: delphi delphi-2009 compiler-directives
当我在代码中使用 Delphi 指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
在项目中我在哪里分配“某事”这个词?我在项目选项的某些地方尝试过,但没有奏效。我猜我没有找到正确的。
【问题讨论】:
标签: delphi delphi-2009 compiler-directives
它位于 Project | 下的 Conditional Defines 槽中选项,在 D2010 上看起来像这样:
【讨论】:
其他答案为您指出了定义符号的位置以及不同方法的范围含义。
然而,尚未有人提及的是,如果您更改 DEFINE 符号,您必须完全构建您的项目,以便它们对您的代码产生任何影响。
当您“编译”时,Delphi 编译器只会编译自上次编译后自身发生变化的单元。如果您更改 DEFINE 符号,这不会更改任何项目单位,因此如果未重新编译这些单位,则 DEFINE 符号的更改将不会对这些单位产生任何影响。
要强制更改 DEFINE 符号以应用于所有单元,您必须“构建”,而不是编译。
这可以解释为什么您之前尝试设置定义似乎不起作用
【讨论】:
您也可以在 {$DEFINE
【讨论】:
您可以在两个地方放置在项目的所有单元中使用的条件定义:
我为什么要提到第二个选项?因为它允许基于 VERxxx 条件定义和 1 中给出的其他条件定义进行专门处理。有关示例,请参见 jedi.inc(来自 Jedi JCL)。
另外,正如 Deltics 所说:当它确定要重新编译哪些单元时,编译器只检查单元本身是否发生了变化,而不是条件定义或任何包含文件是否发生了变化。因此,如果您更改条件定义,您必须进行重建,而不仅仅是重新编译。由于 Delphi 编译器非常快,幸运的是这对编译时间没有太大影响。
【讨论】:
您可以在扩展名为 .inc 的外部文件中定义全局符号。 创建一个新的文本文件,将您定义的所有内容放入其中并将其另存为 Predefines.inc:
--- Predefines.inc 文件的内容---
{$DEFINE Symbol}
{$IFDEF Symbol}
{$DEFINE AnotherSymbol}
{$ENDIF}
在你的 Delphi 模块中,你需要检查是否定义了符号,把这段代码放在接口部分:
interface
{$I Predefines.inc}
uses ...
// Check you defines
{$IFDEF Symbol}
...
{$ENDIF}
【讨论】: