2013-10-06 118 views
1

有誰知道如何使用makefile編譯Obj-C代碼。目前,我可以獲得編譯代碼並給我一個unix可執行文件,但是我不知道如何創建一個osx可執行文件,因爲當我嘗試時,它給了我「不能運行應用程序,因爲經典環境不再受支持」錯誤。編譯目標C使用Makefile

我當前的makefile文件如下:

CC = gcc 
SOURCES=Src/OSX/main.m 
FRAMEWORKS:= -framework Foundation -framework Cocoa -framework AppKit 
LIBRARIES:= -lobjc 
CFLAGS=-Wall -Werror -arch i386 -g -v $(SOURCES) 
LDFLAGS=$(LIBRARIES) $(FRAMEWORKS) 
OUT=-o Build/main 

all: $(SOURCES) $(OUT) 

$(OUT): $(OBJECTS) 
    $(CC) -o $(OBJECTS) [email protected] $(CFLAGS) $(LDFLAGS) $(OUT) 

.m.o: 
    $(CC) -c -Wall $< -o [email protected] 
+0

運行'file Build/main'命令的輸出是什麼?運行時,make的輸出是多少? –

+0

不要明確設置CC - 讓它來自默認設置 –

回答

0

首先,有沒有錯,你的makefile。我將它與以下main.m文件一起使用,並按預期運行。

#include <Foundation/Foundation.h> 
#include <stdio.h> 
#include <AppKit/AppKit.h> 
int main (int argc, char **argv) { 
    NSObject *obj = [[NSObject alloc] init]; 
    NSView *view = [[NSView alloc] init]; 
    fprintf(stderr, "Object: %s\n", [[obj description] UTF8String]); 
    fprintf(stderr, "Object: %s\n", [[view description] UTF8String]); 
    return 0; 
} 

此外,file Build/main產生預期的結果:Mach-O executable i386


「無法運行的應用程序,因爲Classic環境不再支持。」

當您嘗試運行爲Mac OS 9或更低版本(即Apple的「Classic」Mac OS System)構建的應用程序時,會發生此錯誤。你確定你在其他地方沒有做過什麼有趣的事情嗎(例如試圖使用已棄用的Carbon API等)?

+0

makefile似乎正在工作並創建Mach-0,但是「無法運行應用程序,因爲經典環境不再受支持」錯誤依然存在。另外,你是否有任何刪除或隱藏終端的提示,因爲我只是創建一個Cocoa NSApplication,但終端仍然存在。對不起,我對Objective-C和Apple開發頗爲陌生。 – Steadi

+0

@MattDwarf這可能值得另一個SO問題 - 我來自iOS背景,所以我不能真正幫助Cocoa開發,對不起。 – Ephemera

+0

您首先需要創建一個NSApplication實例來與WindowServer建立一個接口。這可以簡單地通過給指令返回NSApplicationMain(argc,argv)來完成; –