当我在代码中使用Delphi指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
我在哪里为项目分配“某事”这个词?我在一些地方试过项目选项,但它没有用。猜猜我没找到正确的那个。
答案 0 :(得分:16)
它位于Project |下的条件定义插槽中选项,在D2010上看起来像这样:
答案 1 :(得分:13)
其他答案为您指出了定义符号的位置以及不同方法的范围含义。
然而,没有人提到的是,如果你更改了DEFINE符号,你必须对项目进行全面构建,以便它们对你的代码产生任何影响。
当您“编译”时,Delphi编译器将只编译自上次编译以来自身已更改的单元。如果更改DEFINE符号,则不会更改任何项目单位,因此如果不重新编译单位,则DEFINE符号中的更改将不会对这些单位产生任何影响。
要强制要在所有单位中应用的DEFINE符号中的更改,必须“构建”,而不是编译。
这可以解释为什么您尝试设置定义似乎以前不起作用
答案 2 :(得分:12)
您还可以在{$ DEFINE< symbol>}指令中定义它们。范围有什么变化。定义< symbol>时在项目选项中的条件定义下,范围对整个项目是全局的。 $ DEFINE指令仅在它们被声明到当前模块结尾时有效,或直到使用相同< symbol>的$ UNDEF指令为止。遇到了。使用方法取决于您的需求以及IFDEF的作用。
答案 3 :(得分:9)
您可以在两个地方放置在项目的所有单元中使用的条件定义:
为什么我提到第二种选择?因为它允许基于VERxxx条件定义和1中给出的其他条件定义进行专门处理。请参阅jedi.inc(来自Jedi JCL)的示例。
此外,正如Deltics所说:当确定要重新编译哪些单元时,编译器仅检查单元本身是否已更改,而不是条件定义或任何包含文件是否已更改。因此,如果更改条件定义,则必须执行重建,而不仅仅是重新编译。由于Delphi编译器速度非常快,所以幸运的是编译时没有太大差别。
答案 4 :(得分:6)
您可以使用.inc扩展名在外部文件中定义全局符号。 创建一个新的文本文件,将所有您定义的文件放入其中并保存,例如Predefines.inc:
--- Predefines.inc ---
文件的内容{$DEFINE Symbol}
{$IFDEF Symbol}
{$DEFINE AnotherSymbol}
{$ENDIF}
在Delphi模块中,您需要检查的是已定义的符号,请将此代码放在接口部分中:
interface
{$I Predefines.inc}
uses ...
// Check you defines
{$IFDEF Symbol}
...
{$ENDIF}