假设你已经正确安装了 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 是“你好世界”。
有了这个,只要你和makefile在同一个目录下,你应该可以输入`make'来构建工具。它将创建一个“构建”目录,您将在其中找到可执行文件。这个在调用时只输出:
-$ ./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”。