当我在代码中使用 Delphi 指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
我在项目中在哪里分配“某事”这个词?我在项目选项的某些地方尝试过,但没有奏效。估计我没找到对的。
当我在代码中使用 Delphi 指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
我在项目中在哪里分配“某事”这个词?我在项目选项的某些地方尝试过,但没有奏效。估计我没找到对的。
它位于Project | 下的Conditional Defines槽中。选项,在 D2010 上如下所示:
其他答案为您指出了定义符号的位置以及不同方法的范围含义。
但是,尚未有人提到的是,如果您更改 DEFINE 符号,您必须对您的项目进行 FULL BUILD,以便它们对您的代码产生任何影响。
当您“编译”时,Delphi 编译器将只编译自上次编译后自身发生变化的单元。如果您更改 DEFINE 符号,这不会更改任何项目单位,因此如果未重新编译这些单位,则 DEFINE 符号的更改将不会对这些单位产生任何影响。
要强制更改 DEFINE 符号以应用于所有单元,您必须“构建”,而不是编译。
这可以解释为什么您尝试设置定义以前似乎不起作用
您还可以在 {$DEFINE <symbol>} 指令中定义它们。变化的是范围。当您在项目选项中的条件定义下定义 <symbol> 时,范围对整个项目都是全局的。$DEFINE 指令仅在它们被声明到当前模块的末尾时有效,或者直到遇到使用相同 <symbol> 的 $UNDEF 指令。使用什么取决于您的需求以及 IFDEF 的功能。
有两个地方可以放置在项目的所有单元中使用的条件定义:
为什么我提到第二个选项?因为它允许基于 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}