假設你已經正確安裝在GNUstep和環境設置(所有文件中解釋),那麼你實際上需要在項目中創建的根目錄下的空白GNUmakefile和列出你的來源。
下面是一個簡單的「Hello World」的命令行示例:
創建一個目錄來包含你的源代碼。 HelloWorld將是一個好主意。
其中,創建文件main.m
,Greeter.m
和Greeter.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'。
我不能讓這個問題的正面或反面,但請記住,你沒有可可,碳或CoreAnything。 – 2010-11-28 03:04:57
你定位的是哪個平臺? – WrightsCS 2010-11-28 03:05:13