dzi*_*bul 12 delphi compiler-directives delphi-2009
当我在代码中使用Delphi指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
我在哪里为项目分配"某事"这个词?我在一些地方试过项目选项,但它没有用.猜猜我找不到正确的.
Dav*_*nan 17
它位于Project |下的Conditional Defines插槽中 选项,在D2010上看起来像这样:
Del*_*ics 13
其他答案为您指出了定义符号的位置以及不同方法的范围含义.
但是,没有人提到的是,如果你更改了DEFINE符号,你必须对项目进行全面构建,以便它们对你的代码产生任何影响.
当您"编译"时,Delphi编译器将只编译自上次编译以来自身已更改的单元.如果更改DEFINE符号,则不会更改任何项目单位,因此如果不重新编译单位,则DEFINE符号中的更改将不会对这些单位产生任何影响.
要强制要在所有单位中应用的DEFINE符号中的更改,您必须"构建",而不是编译.
这可以解释为什么您设置定义的尝试以前似乎不起作用
小智 12
您也可以在{$ 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}
Run Code Online (Sandbox Code Playgroud)
在您需要检查的Delphi模块中是定义的符号,将此代码放在接口部分:
interface
{$I Predefines.inc}
uses ...
// Check you defines
{$IFDEF Symbol}
...
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9237 次 |
最近记录: |