0

Java と makefile は初めてなので、makefile に関する入門情報が欲しいです。通常、オンラインで見つかる情報は、ほとんどが例であり、高レベルです。makefile について私が持っている特定の/素朴な質問を次に示します。

  1. メイクファイルのターゲットとなるファイルの種類は何ですか? .class と .java?

  2. メイクファイルはこれらのプロジェクト ファイルに対して何をしますか? 私のプロジェクトは Eclipse で行ったので、.class ファイルは bin に保存され、.java ファイルは scr に保存されます。makefile はこれらのファイル間でどのような関係を築いていますか?

  3. メイクファイルの結果は何ですか? makefile の目的は、実行可能ファイルを作成する方法をコンパイラに伝えることです。その結果、現在のディレクトリに新しい実行可能ファイルが作成されます。はい?

  4. メイクファイルはどこに配置すればよいですか? ビンフォルダに?scr フォルダ? すべてのハエを 1 つのディレクトリの下に混ぜて、その下に置きますか?

  5. 最後に、プロジェクト用に 3 つのクラスをコンパイルする小さな makefile を作成しました。機能していません。理由がわかりません。

メイクファイル:

JFLAGS = -g
JC = javac
.SUFFIXES: .java .class
.java.class:
    $(JC) $(JFLAGS) $*.java

CLASSES = \
    DNA.java \
    C.java \
    fastmatch.java 

default: classes

classes: $(CLASSES:.java=.class)

clean:
    $(RM) *.class

私は何か間違ったことをしましたか?すべてを 1 つのフォルダーの下に置き、コマンド ラインで「make」と入力しました。ここで全体像が欠けていると思うので、誰かが説明してくれたら本当にありがたいです。ありがとう

4

2 に答える 2

8

makeJava を構築するための正しいツールではありません。AntMaven、または別の Java 構築ツールを使用する必要があります。で仕事を終わらせることは可能makeですが、最も単純なJavaプログラム以外の場合は、すべてを削除して毎回最初から再コンパイルするメイクファイルになります。

Make は、C とその仲間の国でうまく機能します。そこでは、ソース ファイルはインポートするすべてのヘッダーに依存し、ヘッダーは (コンパイルされないため) 何にも依存しないため、依存関係ツリーは過度に深くなりません。Java では、すべてのクラスがインポートするすべてのクラスに依存し、そのクラスはさらに別のクラスに依存するため、プロジェクト内の他のすべてのクラスをコンパイルしないと、1 つのクラスをコンパイルできないことがよくあります。makefile でそれを記述することもできますが、Ant が 1 秒以内に行うことを行うには、何時間もの退屈な作業になるでしょう。

言ったことすべて:

  1. 「ターゲット」は、makefile が生成するものです。コードを書くコードを書いていない場合、.javaファイルはターゲットではありません
  2. 投稿したメイクファイルでは、ファイルは対応するファイル.classと同じ場所になります.java
  3. makefile の結果は、基本的に何でもかまいません。 makeは、それ自体がかなり強力な言語です。このmakefileの結果は、コンパイルされた 3 つの Java クラスです (javacコンパイルするクラスがさらに見つかるか、一部のクラスに内部クラスが含まれている可能性があるため、それ以上になる可能性があります。繰り返しますが、これがmakeJava の悪いツールである理由です) 。
  4. 通常、makefile はルート プロジェクト ディレクトリにあります。多くの場合、複雑なプロジェクトにはサブディレクトリ用の他のメイクファイルがあります
于 2013-04-02T05:17:31.220 に答える
1

私は自分のメーカーを思い出すのに苦労していますが、必要だと思います:

%.class : %.java
        $(JC) $(JFLAGS) $<
于 2013-04-02T05:15:58.800 に答える