2010-11-28 10 views
0

私はこの質問以来私を許してください私はまた確信している、私は期待する前に尋ねられている。 私が抱えている問題は、私はまだMacを持っていないので、私は見ているPC上でobj-cを学ぼうとしているということです。私は自分のコードとGNUstepをコンパイルして作成するためにJeditを使用しています。私の問題は、#includeを使用してコンパイルしようとしたときに発生しています。Objective-cコンパイルの問題...ヘルプ?

私はオンラインで見つかったすべてのものと同様に学ぶために使っている本によれば、私のコンパイラをライブラリやディレクトリに向ける。私はmakeファイルを好むでしょう。物事をテストして学ぶ方がはるかに簡単で速いようです。

私の本にオンラインで追加されたGNUmakeファイルが見つかったようですが、使い方や使い方が分かりません。そういうプロセスを知っているか、その知恵を伝えたいと思っている人がいれば、私はそれを理解しやすいと指摘してください。

は、あなたが実際にあなたのプロジェクトのルートディレクトリに空白たGNUmakefileを作成する必要があります(すべての文書で説明)が正しくGNUstepのをインストールしていると、ご使用の環境が設定されていると仮定すると、あなたの時間のために親切に

+0

私はこの質問の頭や尾を作ることはできませんが、あなたはCocoa、Carbon、CoreAnythingを持っていないことに注意してください。 –

+0

あなたはどのプラットフォームをターゲットにしていますか? – WrightsCS

+1

おそらくこの質問は役に立ちます:http://stackoverflow.com/questions/1060958/gnustep-getting-started –

答えて

4

をありがとうとあなたのソースをその中にリストアップしてください。ここで

は、単純な「Hello World」のコマンドラインの例です:

は、ソースコードを格納するディレクトリを作成します。 HelloWorldは良い考えです。

その場合、ファイルmain.m,Greeter.mおよびGreeter.hを作成します。

-sayHelloToRecipient:のメソッドを1つだけ持つGreeterクラスを作成します。 Greeter.h

#import <Foundation/Foundation.h> 

@interface Greeter : NSObject { 
} 

-(void)sayHelloToRecipient:(NSString *)recipientName; 

@end 

そしてGreeter.m中:

#import "Greeter.h" 

@implementation Greeter 

-(void)sayHelloToRecipient:(NSString *)recipientName { 
    NSLog(@"Hello %@!", recipientName); 
} 

@end 

あなたmain.mファイルは、単にGreeterを含み、引数@"World"でそれを呼び出します。

#import "Greeter.h" 

int main(void) { 
    Greeter *greeter = [[Greeter alloc] init]; 
    [greeter sayHelloToRecipient:@"World"]; 
    [greeter release]; 
    return 0; 
} 

今、あなたが構築するためにあなたのソースの準備ができて持って、あなただけのGNUmakefileを作成する必要があります。空のファイルを作成し、include $(GNUSTEP_MAKEFILES)/common.makeという行で開始し、行はinclude $(GNUSTPEP_MAKEFILES)/tool.makeで終わります。

最初の行にはGNUstepが提供する他のすべてのmakefileとターゲットが含まれています。最後の行には、コマンドラインツールを作成するために必要なmakefileが含まれています。 GUIアプリケーションを構築していた場合は、application.makeを追加します。フレームワークのためにあなたがframework.makeなど

include $(GNUSTEP_MAKEFILES)/common.make 

# Your project-specific directives will go here 

include $(GNUSTEP_MAKEFILES)/tool.make 

を含めると思いますが、これらの行の間に置くものがプロジェクトにプロジェクトから変わるものです。

完全GNUmakefile

は、次のようになります。そうする

include $(GNUSTEP_MAKEFILES)/common.make 

HELLO_ROOT_DIR = $(abspath .) 

GNUSTEP_BUILD_DIR = $(HELLO_ROOT_DIR)/build 

TOOL_NAME = HelloWorld 

HelloWorld_OBJC_FILES = \ 
    Greeter.m \ 
    main.m 

include $(GNUSTEP_MAKEFILES)/tool.make 

HELLO_ROOT_DIRは完全に任意であり、プロジェクトの成長に合わせて(ルートへのパスを再入力することから私を保存し、変数だけであり、メークファイルの複雑さ)。

TOOL_NAME、すなわち、この場合には、私はTOOL_NAMEは「HelloWorldの」であるため、HelloWorld_OBJC_FILESを使用する必要があります(コマンドラインツールのために必要と出力ファイル名の両方を指定し、あなたが*_OBJC_FILESラインに使用するために必要なものを決定している。

makefileと同じディレクトリにあるなら、 `make 'と入力するだけでツールをビルドすることができます。ビルドディレクトリが作成され、そこに実行可能ファイルがありますこれは呼び出されたときに出力されます:

-$ ./build/obj/HelloWorld 
2010-11-28 03:36:28.459 HelloWorld[12949] Hello World! 

なしあなたの環境が正しく構成されていない場合は、この機能は動作します。私はWindowsでこれをやったことはありませんが、私は同じ原則が当てはまると思います。これはLinux/UNIX上でシェルスクリプトを実行しています(Windowsのバッチファイルを実行していますか?)。

-$ . /usr/share/GNUstep/Makefiles/GNUstep.sh 

それが正しくコンソールに環境変数GNUSTEP_MAKEFILESを印刷することにより構成されたかどうかを確認することができます:

-$ echo $GNUSTEP_MAKEFILES 

(Windows上でこれを行う方法がわからない)

を、それは何も出力しない場合は、あなたの環境が正しく設定されておらず、GNUstepが正しくインストールされていない。パスを出力する場合は、 `make 'を実行するのが安全でなければなりません。

+0

あなたは、VirtualBoxをインストールしてそれを実行するLinux仮想マシンを作成すると、GNUstepを使って開発した方がより楽しい経験になるかもしれません。私はあなたのための学習プロセスを複雑にするWindows上でやることを非標準的な方法がたくさんあると想像することができます。 – d11wtq