0

この質問は私も確信しており、私が期待する前に尋ねられたので、私を許してください. 私が抱えている問題は、まだMacを持っていないので、PCでobj-cを学ぼうとしていることです。私は Jedit を使用してコードを記述し、GNUstep を使用してコンパイルおよび作成しています。ただし、 #include を使用してコンパイルしようとすると問題が発生します

私が学習に使用している本と、オンラインで見つけた他のすべてのもの(および完全には理解していない)によると、makeファイルが必要か、ライブラリまたはディレクトリでコンパイラを指す必要があります。物事をテストして学ぶのがずっと簡単で速いように見えるので、私が推測するmakeファイルを好むでしょう。

主な質問は次のとおりです。私の本へのオンライン追加に付属の GNUmake ファイルを見つけたようですが、それを使用する方法やどこに行くべきかわかりません。ですから、誰かが私にわかりやすいプロセスを指摘してくれたり、そのようなプロセスを知っていて、その知恵を喜んで教えてくれたりしたら、それは大歓迎です.

どうぞよろしくお願いいたします。

4

1 に答える 1

4

GNUstep を正しくインストールし、環境がセットアップされていると仮定すると (すべてドキュメントで説明されています)、実際にはプロジェクトのルート ディレクトリに空の GNUmakefile を作成し、その中にソースをリストする必要があります。

簡単な「Hello World」コマンド ラインの例を次に示します。

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

その中で、ファイルを作成しますmain.mGreeter.mおよびGreeter.h.

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

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 が提供する他のすべてのメイクファイルとターゲットが含まれています。最後の行には、コマンド ライン ツールを生成するために必要なメイクファイルが含まれています。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コマンドラインツールに必要であり、出力ファイル名を指定し、ラインに使用する必要があるものを決定します(*_OBJC_FILESつまり、この場合は「HelloWorld」.HelloWorld_OBJC_FILESTOOL_NAME

これが整っていて、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' を安全に実行できるはずです。

于 2010-11-28T03:53:11.483 に答える