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

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

我在哪里分配项目中的“某物”一词?我在项目选项的某些地方尝试过,但它不起作用。猜猜我没有找到正确的一个。

有帮助吗?

解决方案

有条件定义 项目下的插槽|选项,在D2010上看起来像这样:

Delphi Project Options dialog

其他提示

其他答案将您指向定义符号和不同方法的范围含义的地方。

但是,尚未有人提到的是,如果您更改定义符号,则必须对项目进行完整构建,才能对您的代码产生任何影响。

当您“编译”时,Delphi编译器将仅编译自上次编译以来自身更改的单元。如果更改定义符号,则不会更改任何项目单元,因此,如果未重新编译单元,则定义符号的更改将不会在这些单元中产生任何效果。

要强制定义要应用于所有单位的符号的变化,您必须“构建”,而不是编译。

这可能解释了为什么您试图定义的尝试以前似乎不起作用

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

在两个地方,您可以将有条件定义用于项目的所有单位:

  1. 在项目选项中(正如大卫·赫弗南(David Heffernan)所说的那样)
  2. 在包含的文件中包含在 全部 这些单位

我为什么要提到第二个选项?因为它允许基于Verxxx条件定义的专门处理,并在1中给出其他条件定义。

另外,正如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}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top