2010-11-28 85 views
0

請原諒我,因爲這個問題我也確定,之前已經問過我的預期。 我遇到的問題是,我想在電腦上學習obj-c,因爲我還沒有mac。我使用Jedit編寫我的代碼和GNUstep來編譯和創建。但我的問題發生時,試圖編譯使用#includeObjective-C編譯問題...幫助?

根據我用來學習的書以及我在網上找到的一切(並不完全理解),我需要一個make文件或將我的編譯器指向庫或目錄。我更喜歡make文件,因爲它看起來更容易,更快速地測試和學習。

接下來的主要問題是:我似乎已經找到了一本GNUmake文件,它隨附在我的書中,但我不知道如何使用它或在哪裏使用它。所以如果有人可以爲我指出一個容易理解的過程或知道這樣的過程,並願意傳授這種智慧,那將是非常感謝。

衷心感謝你爲你的時間

+0

我不能讓這個問題的正面或反面,但請記住,你沒有可可,碳或CoreAnything。 – 2010-11-28 03:04:57

+0

你定位的是哪個平臺? – WrightsCS 2010-11-28 03:05:13

回答

4

假設你已經正確安裝在GNUstep和環境設置(所有文件中解釋),那麼你實際上需要在項目中創建的根目錄下的空白GNUmakefile和列出你的來源。

下面是一個簡單的「Hello World」的命令行示例:

創建一個目錄來包含你的源代碼。 HelloWorld將是一個好主意。

其中,創建文件main.m,Greeter.mGreeter.h

我們將創建Greeter類,它只有一個方法-sayHelloToRecipient:

Greeter.h

#import <Foundation/Foundation.h> 

@interface Greeter : NSObject { 
} 

-(void)sayHelloToRecipient:(NSString *)recipientName; 

@end 

而在Greeter.m

#import "Greeter.h" 

@implementation Greeter 

-(void)sayHelloToRecipient:(NSString *)recipientName { 
    NSLog(@"Hello %@!", recipientName); 
} 

@end 

main.m文件只包含Greeter,並與參數@"World"調用它。

#import "Greeter.h" 

int main(void) { 
    Greeter *greeter = [[Greeter alloc] init]; 
    [greeter sayHelloToRecipient:@"World"]; 
    [greeter release]; 
    return 0; 
} 

現在你已經得到了你的源代碼準備建立,你只需要創建一個GNUmakefile。創建一個空文件,並使用以下行開始:include $(GNUSTEP_MAKEFILES)/common.make,以行include $(GNUSTPEP_MAKEFILES)/tool.make結束。

第一行包括GNUstep提供的所有其他makefile和目標。最後一行包括生成命令行工具所需的makefile。如果你是構建一個GUI應用程序,你會包括application.make。對於框架,你會包括framework.make

include $(GNUSTEP_MAKEFILES)/common.make 

# Your project-specific directives will go here 

include $(GNUSTEP_MAKEFILES)/tool.make 

你這些線路之間放的東西是從項目到項目更改的東西。

完整GNUmakefile看起來是這樣的:

include $(GNUSTEP_MAKEFILES)/common.make 

HELLO_ROOT_DIR = $(abspath .) 

GNUSTEP_BUILD_DIR = $(HELLO_ROOT_DIR)/build 

TOOL_NAME = HelloWorld 

HelloWorld_OBJC_FILES = \ 
    Greeter.m \ 
    main.m 

include $(GNUSTEP_MAKEFILES)/tool.make 

HELLO_ROOT_DIR完全是可選的,並且僅僅是節省了我不必爲項目的發展重新鍵入路徑到根(變量也是如此的makefile的複雜性)。

TOOL_NAME需要一個命令行工具,同時指定輸出文件名,並確定你需要使用的*_OBJC_FILES線(即在這種情況下,我需要使用HelloWorld_OBJC_FILES因爲TOOL_NAME是「HelloWorld」的東西。

這樣做,只要你和makefile在同一個目錄下,你應該能夠輸入'make'來構建工具,它將創建一個「build」目錄,並在其中找到可執行文件這一次調用時只輸出:

-$ ./build/obj/HelloWorld 
2010-11-28 03:36:28.459 HelloWorld[12949] Hello World! 

無如果您的環境配置不正確,這將工作。我從來沒有在Windows上這樣做過,但我認爲應用了相同的原則。這是在Linux/UNIX上運行一個shell腳本(在Windows上運行批處理文件?)以配置環境。

-$ . /usr/share/GNUstep/Makefiles/GNUstep.sh 

您可以檢查它是否正確地打印環境變量GNUSTEP_MAKEFILES控制檯配置:

-$ echo $GNUSTEP_MAKEFILES 

(不知道你是如何做到這一點在Windows上)

如果什麼也不輸出,您的環境未正確配置和/或GNUstep未正確安裝。如果它輸出一個路徑,你應該安全地運行`make'。