编译器指令不匹配

Compiler directives mismatch

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

procedure TForm1.Button1Click(Sender: TObject);
begin

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

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

end;

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

换句话说,IOS 应用程序执行为 MACOS

定义的任何代码

有什么想法吗?

这是设计使然,如您在文档 Conditional Compilation 中所见。

如果要区分 iOS 和 OSX,请使用 MACOS (OSX) 和 CPUARM (IOS)取而代之的是预定义常量,它们都列在我上面链接的文档的 platform 部分。

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