昔書いたWindows + Eclipse + objective-cのお話

かれこれ5年前に別のブログで書いた記事なんですが、いろいろあって移行しようと思って書き直し。 (5年前はこんな変なことやってたのなwと改めて思った…。Qiitaにしようか悩んだけど、雑記も書きたいしはてブに移行)
とはいえ、5年前にやってたやーつなので今この設定で動くかは謎です!(検証しろよ、おいw

1.については本家から落として、日本語化するなりpleadesからCDTオールインワンを落とすなりですぐ終わるかと。また、ウィンドウ⇒設定⇒C/C++⇒ファイル・タイプで*.mをCソースファイルに関連付けておかないといろいろ困るかもしれません。   2はそのままインストールぅぅ

3は注意書きの通り、当時はチェック入れてもlibobjc.aがインストールされないという…orz

で、今回の本題の4ですね。

まず下のようにデフォルトのビルダーのチェックを外します。 f:id:mame_boz:20160320015117p:plain

で、自分でビルダー作成します。(今回の例だとTestObjcMake) f:id:mame_boz:20160320015124p:plain

ビルダー設定のロケーションはmakeアプリケーションを指定し、 ※ロケーションのmakeがmingwになっていますが、C:\GNUstep\bin\make.exeのGNUstepの方を指定して下さい! 作業ディレクトリはmakefileを保存している{project_loc}の親ディレクトリを指定します。

つまり今回の構成は

TestObjcMake
  └ Debug
     └ makefile

という感じになっております。

で、肝心なmakefileの中身ですが、今回は以下のようにしてます。

TARGET = TestObjcMake.exe
INCLUDE = /GNUstep/System/Library/Headers
LIB = /GNUstep/System/Library/Libraries
CFLAGS=-fconstant-string-class=NSConstantString -enable-auto-import
LINK = C:/MinGW/lib/gcc/mingw32/4.5.0/libobjc.a
SRCS = $(shell find ../src -type f -name *.m)
CC = gcc

$(TARGET): $(SRCS)
            $(CC) -o $(TARGET) $(SRCS) -I $(INCLUDE) -L $(LIB) -lgnustep-base $(CFLAGS) -lobjc
            
clean:
        $(RM) $(TARGET)

ちなみに自分はまともにmakefileを書くのは初めてなので、こいつへたくそだな!ってのは勘弁して下さいましm( )m

まぁ、こんな感じで以下のソースのコンパイルが通るはずです。(ファイル拡張子は.m)

#import <stdio.h>
#import <objc/Object.h>

@interface Test : Object
- (void)method;
@end

@implementation Test
- (void)method {
    printf("オブジェクトのテスト\n");
}
@end

int main() {
    id obj = [Test alloc];
    [obj method];
    return 0;
}

そしてこの環境を作った当時、WIN32APIもimportして、ウィンドウ描画しつつ中の文字列はNSStringとかやっててWindowsAppleの融合やぁぁぁってすごいテンション高かったのを覚えています( ´ー`)y-~~

ま、あの時はWindowsXP使ってたので何故かWindows上でObjective-Cを書きたいだけの熱意で↑頑張っただけなんですけどね…。懐かしい…