我有两个工程,一个被共用的单与,都在一个目录下。
其中一个工程文件中定义:
{$DEFINE AMS_QUERY}
另一个工程文件中定义:
{$DEFINE AMS_FULL}然后在被共用的单元文件中写下如下语句:
uses
{$IFNDEF AMS_QUERY}
  AmsqMainfrm
{$ENDIF}
{$IFNDEF AMS_FULL}
  uMainfrm
{$ENDIF}
;
其中 AmsqMainfrm 和 uMainfrm 也和两个工程文件、被共用的单元在同一目录下。为什么不管我编译哪个工程都有错误提示:
',' or ';' expected but identifier 'uMainfrm' found也就是说 {$IFNDEF AMS_QUERY} 和 {$IFNDEF AMS_FULL} 都起作用了!
怎么回事?

解决方案 »

  1.   

    不是这样的.只有一个起作用.但你的问题是你测试的时候没有注意你的编译动作.1.Project1 不做任何条件设置, 再运行Project1任何条件都不起作用(不管以前有多少Project共享此单元)
    2.Project1 先新(注意新字)加编译条件1, 再运行Project1 条件1起作用(不管以前有多少Project共享此单元)
    3.Project1 先修改编译条件1,再运行Project1 条件1起作用(不管以前有多少Project共享此单元)
    4.Project2 先修改编译条件2, 然后编译Project2,再运行Project1 条件2起作用
      

  2.   

    const
    RELEASE_VERSION=True;RELEASE_VERSION=False;
    {$IF RELEASE_VERSION}
    DEBUG=False;
    {$ELSE}
    DEBUG=True;
    {$IFEND}
    使用没什么问题
      

  3.   

    uses
    {$IFNDEF AMS_QUERY}
      AmsqMainfrm;    //加上分号,如果后面还有引用单元则加上逗号
    {$ENDIF}
    {$IFNDEF AMS_FULL}
      uMainfrm;
    {$ENDIF}
      

  4.   

    {$DEFINE}并不能影响其它单元你可以用头文件的方式"Head.inc"
    {$DEFINE AMS_QUERY}------------------
    "Unit1.pas"
    unit Unit1;{$Include "Head.inc"}
      

  5.   

    如果条件只针对工程,那在工程选项里设置也很方便
    Project Options->Directories/Conditionals->
    Conditionals defines:
    AMS_QUERY;...