编译器指令不匹配
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)}
.
我有一个应用程序应该在 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)}
.