6

コロンの左側が実行可能ファイルを表し、右側が「依存関係」、つまり上記のターゲットを生成するために必要なファイルを表すという印象を受けまし:target

hello : hello.c
    gcc hello.c -Wall -o hello

それで、ターゲットの「hello」は最終的な実行可能ファイルの名前だと思いました。

executableHelloWorldFile : hello.c
    gcc hello.c -Wall -o hello

しかし、「hello」を「executableHelloWorldFile」に変更しても、出力は何も変わりませんでした。

ターゲットの作成方法は知っていますが、ここで Makefileがどのような点で役立つかを理解したいと思いますか?target

4

5 に答える 5

11

まず、Target は fileであると想定されます。ファイルが存在しない場合、またはそのタイムスタンプが依存関係のいずれよりも新しい場合は、再作成されます。ターゲット名を実際のファイル名からランダムなものに変更すると、ターゲットは常に再作成されます。これは、make をだましている任意のファイルが存在せず、make が指定したコマンドを実行しても作成されないためです。

編集:あなたのコンパイラはmakeがそれを呼び出すことを知りません。コンパイラはあなたが与えた指示を正確に実行します(すべてのコンピュータープログラムが実行し、実行する必要があるように)。「-o hello」と言うと、思いついた偽のターゲット名に関係なく、バイナリをファイル「hello」に書き込みます。

于 2012-07-02T06:30:38.150 に答える
3

Amake targetは基本的に、再構築したいファイルです。

Makeはあなたが構築したいものを神聖にすることはできないので、暗黙的または明示的に、何を構築すべきかを伝える必要があります。多くの場合、ファイルの最初のターゲットは「all」などの名前であり、明示的なターゲットなしで「make」を実行すると、makefileにリストされている最初のターゲットがビルドされます。ただし、一部のmakefileはターゲットを指定しません。次に、コマンドラインで1つ指定する必要があります。または、デフォルトのターゲットをビルドしたくない場合は、ビルドするターゲットを指定する必要があります。

Amakefileには通常、プログラムの作成、プログラムのインストール、後のクリーンアップなどを行うためのコードが含まれます。

したがって、ターゲットという単語は、などのさまざまなキーワードにすることができますall, install, clean, etc

それは何かを作るという言い方です。すべてを意味するすべてを行う

于 2012-07-02T06:34:24.797 に答える
2
  1. はい、あなたの例では、ターゲット「hello」はたまたま.exe「hello」を構築します。

  2. しかし、いいえ、ターゲットを使用して任意のアクション (またはアクションの組み合わせ) をトリガーできます。

    たとえば、「make clean」、「make build」、「make install」、「make all」は一般的なコマンドです。makefile をトリガーして、1) 既にビルドされている「ジャンク」をクリーンアップする、2) プロジェクトを再コンパイルする、3) プロジェクトをインストールする、または 4) すべてを実行する

  3. あなたの質問に答えるために、「ターゲット」は、メイクファイルに「何かをする」ように指示する方法にすぎません。

    あなたの例では、ターゲットは「gcc」を呼び出します。ただし、ソースファイル「hello.c」が古くなっている場合にのみ、それが呼び出されます。

  4. 通常、makefile は多くのターゲット、ルール、および定義で構成されます。

    通常、コンポーネントは複数のサブプロジェクトで構成され、それぞれに独自の makefile があります。

'それが役立つことを願っています.. PSM

于 2012-07-02T06:33:04.697 に答える
1

ルールで適切な変数を使用する必要があります。$@ターゲット$^は依存関係です。あなたの場合、これは次のようになります。

executableHelloWorldFile : hello.c
    gcc $^ -Wall -o $@

または、最初の依存関係のみを参照する必要がある場合は、次を使用します$<

executableHelloWorldFile : hello.c
    gcc $< -Wall -o $@
于 2012-07-02T06:31:12.187 に答える
1

make は与えられたコマンドを実行します。そのコマンドでターゲットが作成されない場合、間違ったコマンドを書いたのはあなたの責任です。大きな違いは、ターゲットが正しく指定されている場合、make を 2 回続けて実行でき、2 回目でターゲットが最新であり、再構築する必要がないことを認識できることです。コマンドによってターゲットが実際に作成されていない場合、make を 2 回続けて実行すると、2 回目は不必要にコマンドを再実行します。

一部のターゲット (allや などclean) は、実際には既存のファイルではなく、慣習的に Makefile に含まれています。make cleanこれらは、コマンドを毎回実行する必要がある場合など、ユーザーがコマンドで要求できるより大きなアクションを表します。

于 2012-07-02T06:33:20.970 に答える