Objective-c编译问题......有帮助吗?

时间:2010-11-28 03:01:45

标签: objective-c gnustep

请原谅我,因为这个问题我也很确定,在我预料之前已被问过。 我遇到的问题是,我试图在电脑上学习obj-c,因为我还没有Mac。我正在使用Jedit编写我的代码和GNUstep来编译和创建。但是当我尝试使用#include

进行编译时,我的问题就出现了

根据我正在使用的书以及我在网上找到的所有其他内容(并且不太了解),我需要一个make文件或将我的编译器指向库或目录。我更喜欢make文件,因为它似乎更容易,更快速地测试和学习。

接下来的主要问题是:我似乎找到了一个GNUmake文件,该文件随附在我的书中的在线添加,但我不知道如何使用它或在哪里使用它。所以,如果有人能够指出一个易于理解的过程或知道这样的过程并且愿意传授这种智慧,那将非常感激。

非常感谢你的时间

1 个答案:

答案 0 :(得分:4)

假设您已正确安装了GNUstep且您的环境已设置(所有文档中都有解释),那么您实际上需要在项目的根目录中创建一个空白的GNUmakefile并在其中列出您的源。

这是一个简单的“Hello World”命令行示例:

创建一个包含源代码的目录。 HelloWorld是个好主意。

在其中,创建文件main.mGreeter.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/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'。