web-dev-qa-db-ja.com

「ターゲットの作成」とは何ですか?

ソースコードをビルドする前にmake targetを作成する必要があるのはなぜですか?

具体的には、 ターゲットを作成 とは正確には何ですか?

20
Lazer

Makefileは次のようになります。

all: mybinary

mybinary: files.o it.o depends.o on.o
[tab]$(CC) $(CFLAGS) files.o it.o depends.o on.o -o mybinary

files.o: files.c files.h
[tab]$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@

...

つまり、make allと入力すると(省略形はmakeと入力するだけです)、mybinaryターゲットまたはファイルが最新であることを確認します。そのためには、mybinaryがすべてのfiles.o it.odepends.oおよびon.oよりも新しいことを確認する必要があります。そうでない場合は、次の行で指定されているシェルコマンドを使用してmybinaryを構築します。ただし、その前に、files.oなどが最新であることを最初に確認します。つまり、files.cおよびfiles.hよりも新しい必要があります。そうでない場合は、次の行で指定されているシェルコマンドを使用してfiles.oをビルドします。すべての* .oファイルが最新になると、mybinaryを構築できます。 mybinaryが構築されると、すべてのターゲットが満たされます。

通常、ターゲットは単なるファイルです。ブロックの形式は次のとおりです。

target: list of dependency files
[tab]Shell commands to build target if it's older than any of its dependencies
[tab]more Shell commands
[tab]still more

ターゲットはワイルドカードを使用して指定することもできます。たとえば、%.cは、シェルで*.cと呼ぶものを意味します。

一部のターゲットは「偽の」ターゲットであり、実際のファイルに対応していないことを意味します。 「すべて」のターゲットはこの種のものです。 「クリーンな」ターゲット(make clean)も同様です。等々。 「all」または「clean」というファイルを作成する必要はありません。ターゲットが偽物であることを指定するには、さまざまな方法があります。

Makefileに最初に表示されるターゲットは、単にmakeと入力した場合に呼び出されるターゲットです。 1つの規則は、このターゲットに「すべて」という名前を付けることです。したがって、makemake allと同じになります。

24
dubiousjim

「ターゲットの作成」は基本的に、再構築するファイルです。

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

ターゲットは、GNU makeの観点から、「偽物」にすることもできます。つまり、それは存在しない名前であり、ルールはそれを作成しませんが、それ(偽物) target)は、ルールが関連付けられている他の多くのファイルに依存します。実際、「all」ターゲットは通常、偽のターゲットです。ほとんどのディレクトリに「all」というファイルはありません。

6

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

したがって、単語targetは、allinstallcleanなどのさまざまなキーワードにすることができます。

Make somethingの言い方です。 make allすべてを行うを意味します

2
pavium

makeは、ソースコードファイルとそれらから生成されたオブジェクトコードの間のファイル日付をチェックし、ソースが新しいものをコンパイルする一般的な開発ツールです。これは、比較する必要のあるファイルをリストするmakefileと呼ばれるファイルを使用して行われます。

標準の構文はmake /f makefile myprog.exeです。

これは、makefileのファイルリストを使用してmyprog.exeをビルドすることを意味します。 makefileのデフォルトはmakefile.makであるため、その名前を使用する場合は、コマンドラインで指定する必要はありません。

myprog.exeここではターゲットと呼ばれます。 1つのトリックは、存在しないファイルのビルド命令のリストをmakefileに入れることができるということです。次に、そのターゲットをビルドすると言うと、それらのコマンドが実行されます。多くの場合、一時ファイルが削除されたmake cleanのようなものが表示されます。

1
James Curran