Ubuntu 9.04でObjective-Cを試してみる

Objective-Cのインストール

% sudo aptitude install gobjc libgnustep-base-dev

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_*/

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

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);
}

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) $< 
% make
gcc -c -Wall -g -I/usr/include/GNUstep/ main.m 
gcc -c -Wall -g -I/usr/include/GNUstep/ Hello.m 
gcc -lobjc -lgnustep-base -o hello main.o Hello.o
% ./hello 
hello, world
%