しーくさんのUp & Down - Thinking Notes

更新頻度はあまり高くないです。プログラミングやLinuxなどのことについてや、果てはゲーム記事まで。

Objective-CでHello,World!してみる。

というわけで気が向いてしまったので、メモしておく。
なんていうか、初めての言語だから、いくらC言語を踏襲してるとはいえ、わけわけめだった。(特にコンパイルとリンク)

まずは必要なもの一式をインストール。
gcc
gcc-objc
gnustep-base-devel
・clang, llvm, clang++
clang系については、まあ使いたいならってことで。
これでgccからObjective-Cのプログラムをコンパイルできるようになったと思う(なにかメモし忘れがあるかもしれません)。

そしてさっそうとHello,World書いてみる。
ソースプログラム(拡張子は[m]らしい)::Main.m

#import <Foundation/NSObject.h> //Objectを扱うのに必要
#import <stdio.h> //おなじみ、stdio.h

//Helloクラス宣言
@interface Hello : NSObject
{
   //ここに変数宣言などを書く?
}
-(void)say_hello;//void say_hello(void)メソッド宣言
@end//クラス宣言終了

//Helloクラス実装部
@implementation Hello
//void say_hello()メソッド定義。
-(void)say_hello {
	printf("Hello, and GoodBye!!\n");//おなじみ、printf関数で出力
}
@end

int main(int argc, const char *argv[]){
        //試しに、引数表示してみる。
	for(int i = 0; i < argc; i++){
		printf("argv[%d]::%s\n", i, argv[i]);
	}
        //試しにお馴染みの出力してみる
	printf("Hello, Objective-C!!\n");
        //ここからObjective−Cっぽく書いてみる。
	Hello *obj = [Hello alloc]; //こういうふうにインスタンス化するらしい?
	[obj say_hello]; //メソッドはこうやって呼ぶらしい?
	[obj release]; //終わったらこうやって解放するらしい?
    //これで終わり。
	return 0;
}

Makefile

TGTOBJ=hello-objc
ENTRY_SRC=Main.m
OBJS=

CC=gcc
CXX=g++
CFLAGS=-O2
CXXFLAGS=$(CFLAGS)
LDFLAGS=
LIBS=-lobjc -lgnustep-base




all: $(TGTOBJ)

$(TGTOBJ): $(OBJS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(ENTRY_SRC) $(OBJS) $(LIBS)

%.o: %.m
	$(CC) $(CFLAGS) -c $*.m -o $*.o 


.PHONY: clean
clean:
	rm -vf $(OBJS) $(TGTOBJ)
$ make
$ ./hello-objc arg1
argv[0]::./hello-objc
argv[1]::arg1
Hello, Objective-C!!
Hello, and GoodBye!!

以上。簡単なサンプルでした。
CCをclangにすればclangで同じようにコンパイルできます。