Objective-C Tool sampleコードをMacからLinuxへ [Linux]
更に続きなのですが、このcoreGTKの方法だとかつてMacだけを対象としたsample tool コードがLinuxでもそのまま移行できることに気付きました。但し表示に用いられる"xoxo"のダブルコーテーションは認識コードが違っているらしく、これは直さないといけないようです。それで、Linuxで、前に参考書を買ってmacで試したコードをそのまま載せてもらいました。コードとmakefileは、以下です。
CStruct.m
makefile
このmakefileは、macもlinuxも同じです。最もMacではそんなことをしなくても普通にccコマンドでコンパイルできますが、アプリも兼用できますから、これを使って統一性を持たせたほうが良いかもしれません。
もしGUIが必要でないのであれば、gtkは必要ないだろうしmacでもinterface_builderも必要ありません。
ただ、GNUstepの開発は滞っているようだし、iOSのようにMacはもっと先を行っているので、なんとも言えないところは有りますが、Linuxサイドだけで見れば可能性は大だと思います。
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
このmakefileは、macもlinuxも同じです。最もMacではそんなことをしなくても普通にccコマンドでコンパイルできますが、アプリも兼用できますから、これを使って統一性を持たせたほうが良いかもしれません。
もしGUIが必要でないのであれば、gtkは必要ないだろうしmacでもinterface_builderも必要ありません。
ただ、GNUstepの開発は滞っているようだし、iOSのようにMacはもっと先を行っているので、なんとも言えないところは有りますが、Linuxサイドだけで見れば可能性は大だと思います。
2014-04-29 21:49
nice!(0)
コメント(0)
トラックバック(0)
コメント 0