Objective-C Tool sampleコードをMacからLinuxへ [Linux]

更に続きなのですが、このcoreGTKの方法だとかつてMacだけを対象としたsample tool コードがLinuxでもそのまま移行できることに気付きました。但し表示に用いられる"xoxo"のダブルコーテーションは認識コードが違っているらしく、これは直さないといけないようです。それで、Linuxで、前に参考書を買ってmacで試したコードをそのまま載せてもらいました。コードとmakefileは、以下です。
CStruct.m
#import <Foundation/Foundation.h>

@interface MyObject : NSObject
{
     // Objective-Cのクラス宣言内で構造体を宣言できる
     struct MyStruct {
         int data0;
         int data1;
} MyStruct;

     // 構造体の変数もObjective-Cクラス宣言内で使用できる
     struct MyStruct _data;
}
@end

@implementation MyObject

- (id)init
{
     self = [super init];
     if (self)
     {
         _data.data0 = 3;
         _data.data1 = 2;
     }
     return self;
}

- (void)printData
{
     NSLog(@"%d, %d", _data.data0, _data.data1);
}

- (void)printDataFromExternal:(struct MyStruct)externalData
{
      NSLog(@"%d, %d", externalData.data0, externalData.data1);
}
@end

int main (int argc, const char * argv[])
{
     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    MyObject* myObject = [[[MyObject alloc] init] autorelease];
    [myObject printData];

    // Objective-Cのクラス宣言内で宣言した構造体はグローバル扱い
    struct MyStruct data = { 10, 20 };
    [myObject printDataFromExternal:data];

    [pool drain];
    return 0;
}

makefile
#Executable
EXECUTABLE=CStruct
#Sources
SOURCES=CStruct.m
#Objects
OBJECTS=$(SOURCES:.m=.o)#compiler
CC=gcc
#CFLAGS
CFLAGS=-c -Wall
#Objective-c specific flags
OBJCFLAGS=`gnustep-config --objc-flags` `pkg-config --cflags gtk+-2.0`
#Objective-c specific flags
MACOBJCFLAGS=-framework Foundation
#GNUstep dependencies
GNUSTEPDEPS=`gnustep-config --base-libs`
#GTK dependencies
GTKDEPS=`pkg-config --libs gtk+-2.0`
#Common flags
COMMONFLAGS=$(OBJCFLAGS) $(GNUSTEPDEPS) $(GTKDEPS)
#Targets
#Linux Target
linux: all
#Mac Target
mac: COMMONFLAGS=$(MACOBJCFLAGS) $(GTKDEPS)
mac: all
#Windows Target
windows: all
#All Target
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(OBJECTS) $(COMMONFLAGS) -o $@
%.o: %.m
$(CC) $(CFLAGS) $(COMMONFLAGS) $< -o $@lean:
rm -rf *.o *.d CStruct
これを実行した時の画像:
CStruct-file.png
mac-objective-c1.png
このmakefileは、macもlinuxも同じです。最もMacではそんなことをしなくても普通にccコマンドでコンパイルできますが、アプリも兼用できますから、これを使って統一性を持たせたほうが良いかもしれません。
もしGUIが必要でないのであれば、gtkは必要ないだろうしmacでもinterface_builderも必要ありません。
 ただ、GNUstepの開発は滞っているようだし、iOSのようにMacはもっと先を行っているので、なんとも言えないところは有りますが、Linuxサイドだけで見れば可能性は大だと思います。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。