2009年7月20日月曜日

Ubuntuの objective-c でHello world 3

[したいこと・しりたいこと]
Ubuntuの objective-c でHello world
Ubuntuの objecti-c でHello world

[環境]

Ubuntu Jaunty Jackalope 9.04 on VirtualBox 3.0.2

インストールするもの
build-essential gobjc libgnustep-base-dev



[したこと]

(1)インストール

$ sudo aptitude install gobjc libgnustep-base-dev

(2)ソースコードを書く

$ vi Hello.h

#ifndef HELLO_H_
#define HELLO_H_

#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>

@interface CHello :NSObject
{
@private
NSString *m_message;
}
- (id) init:(const char *) message_;
- (void) dealloc;

- (NSString *) getMessage;
@end
#endif /*HELLO_H_*/

$ vi Hello.m

#import "Hello.h"

@implementation CHello
- (id) init:(const char *) message_ {
m_message = [[NSString alloc] initWithCString:message_ encoding:NSUTF8StringEncoding];

return (self);
}

- (void) dealloc {
[m_message release];

[super dealloc];
}

- (NSString *) getMessage {
return (m_message);
}
@end

$ vi main.m

#import <stdio.h>
#import <Foundation/NSAutoreleasePool.h>

#import "Hello.h"

int
main(int argc, char *argv[])
{
NSAutoreleasePool *pool;
id hello;

pool = [[NSAutoreleasePool alloc] init];

hello = [[CHello alloc] init:"hello, world"];

printf("%s\n", [[hello getMessage] cStringUsingEncoding:NSUTF8StringEncoding]);

[hello dealloc];

return (0);
}

$ vi Makefile

CC    = gcc
CFLAGS    = -Wall -g -I/usr/include/GNUstep/
LDFLAGS    = -lobjc -lgnustep-base

LD    = gcc

HELLO    = hello

SRCS    = main.m Hello.m

HEADS    = $(SRCS:.m=.h)
OBJS    = $(SRCS:.m=.o)

all: $(HELLO)

clean:
    $(RM) $(RMFLAGS) $(OBJS) $(HELLO)

$(HELLO): $(OBJS)
    $(CC) $(LDFLAGS) -o $(HELLO) $(OBJS)

.SUFFIXES:.o .m
.m.o:
    $(CC) -c $(CFLAGS) $<

以下3行の次ぎにくる行は、左側をタブで1つぶん、開ける
clean:
$(HELLO): $(OBJS)
.m.o:


(3)コンパイル
$ make

(4)実行
$ ./hello

[参考]
Ubuntu 9.04でObjective-Cを試してみる - メモ帳
http://d.hatena.ne.jp/mtanaka/20090611/p1