0

请原谅我,因为这个问题我也很确定,在我预料之前已经被问到了。我遇到的问题是我正在尝试在 pc 上学习 obj-c,因为我还没有 mac。我正在使用 Jedit 编写我的代码并使用 GNUstep 来编译和创建。但是我的问题是在尝试使用#include 进行编译时发生的

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

那么主要的问题是:我似乎找到了一个 GNUmake 文件,它随我的书的在线补充内容一起提供,但我不知道如何使用它或将它放在哪里。因此,如果有人可以为我指出一个易于理解的过程或知道这样的过程并愿意传授这种智慧,那将不胜感激。

感谢您的宝贵时间

4

1 回答 1

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/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”。

于 2010-11-28T03:53:11.483 回答