编译器指令不匹配

时间:2015-05-01 00:07:44

标签: delphi firemonkey

我有一个应该在MACOS和IOS上运行的应用程序。 不知何故,两个代码都是在编译IOS时执行的,它让我发疯:

procedure TForm1.Button1Click(Sender: TObject);
begin

  {$IfDef MacOs}
  ShowMessage('MACOS');
  {$Endif}

  {$IfDef IOS}
  ShowMessage('IOS');
  {$Endif}

end;

在任何IOS设备上运行时,都会显示这两条消息。

换句话说,IOS应用程序执行为MACOS定义的任何代码

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是设计使然,您可以在文档中的Conditional Compilation中看到。

如果要区分iOS和OSX,请使用MACOS(OSX)和CPUARM(IOS)预定义常量,这两个常量都列在平台我上面链接的文档部分。

正如Remy Lebeau在下面的评论中指出的那样,在iOS模拟器下运行时这并不有效。为了正确区分这两者,您需要使用{$IF defined(MACOS) and not defined(IOS)}