Objective-C 入門(2) Mac OSX で `hello, world'

Mac OSX で `hello, world'

昨晩のネタOSXコンパイルするには、Makefile を書き換える必要があります。

といいますのも、この hello, world に出てくる NSString というクラスが、
言語の標準仕様に含まれる std::string のようなものではなくて、
単に Foundation という OPENSTEP のフレームワークに含まれているクラスライブラリで、そのリンクの指定を Makefile に書いていたからです。
#Visual C++ なら MFC の CString といった感じ

LinuxMakefile の、


LDFLAGS = -lobjc -L/usr/lib/GNUstep/System/Library/Libraries/ -lgnustep-base
は、OPENSTEPの互換品であるGNUstepのライブラリをリンクするための指定なのです。

OSX は OPENSTEP 直系の OS なので、GNUstep など使わなくても最初から Foundation が使えますが、LDFLAGS の指定がちょっと独特です。
具体的には、


LDFLAGS = -framework Foundation
とします。

これで昨晩のネタがばっちり OSX で動くようになりました。

Makefile


CC = gcc
CFLAGS = -Wall -g
LDFLAGS = -framework Foundation

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 main.m
gcc -c -Wall -g Hello.m
gcc -framework Foundation -o hello main.o Hello.o
% ./hello
hello, world