【问题标题】:Objective-c compiling issues... help?Objective-c 编译问题...帮助?
【发布时间】:2010-11-28 03:01:44
【问题描述】:

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

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

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

感谢您的宝贵时间

【问题讨论】:

标签: objective-c gnustep


【解决方案1】:

假设你已经正确安装了 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 是“你好世界”。

有了这个,只要你和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”。

【讨论】:

  • 您知道,如果您安装 VirtualBox 并创建一个 Linux 虚拟机来运行它,您可能会发现使用 GNUstep 进行开发是一种更愉快的体验。我可以想象在 Windows 上会有很多非标准的方式来做事情,这会使你的学习过程变得复杂。
猜你喜欢
  • 1970-01-01
  • 2011-07-19
  • 2015-09-15
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
相关资源
最近更新 更多