Makefileの作成[閉じる]

Makefileの作成[閉じる]

コンパイルするMakefileを作成する方法を知りたいですhello.c

// for example

int main(int argc, char *argv[]) {
    puts("Hello world");
    return 0;
}

私は助けを借りてプログラムをコンパイルして実行したことを知っていますが、gcc hello.c -o helloそれが今まで私が知っているすべてです。

ベストアンサー1

GNU makeには非常に重要な機能があります。オンラインマニュアル, 私の考えにはいろんな面で迷惑で鈍感ですが良い参考資料になります。他の人が言ったように、自分に合ったチュートリアルを見つけて、マニュアルを参照して設定方法などについて理解してください。

ビルド用のデフォルト(GNU make)makefileはhello.c次のとおりです。

CFLAGS += -Wall -g -O0
PROGS = hello

.PHONY: clean

%: %.c
    $(CC) $(CFLAGS) $< -o $@

clean:
    -rm $(PROGS)

$(CC)組み込み変数;オーバーライドしない場合、デフォルト値はでcc、GNUシステムではシンボリックリンクになりますgcc%を表すパターンルール; この場合は一致します。何もないしかし、ディレクトリにない場合、レシピはanything.c失敗します。 $<そして$@自動変数。したがって、今実行すると:

make hello

Makeは以下を実行します。

cc -Wall -g -O0 hello.c -o hello

`$(CFLAGS) と一緒に使うと、+=次のことができます。

CFLAGS="--std=c99" make hello   

したがって、スペースで区切ってに追加-Wall -g -O0されます。--std=c99参考make CFLAGS="--std=c99" helloにしてお使いください変えるmakefile のすべての定義。

ルールは3つの基本部分で構成されています。ターゲット、これ前提条件、しかもレシピねえ)。このルールは、次の状況で実行されます。

  • 宛先ファイルが存在しません。
  • ターゲットファイルが前提条件の1つより古い。

.PHONYそれにもかかわらず、ターゲットは実行されます。したがって、make clean上記のmakeファイルを使用して実行すると、次のことが実行されます。

rm hello

この場合、$(PROGS)他の場所では使用されませんが、より複雑なプロジェクトの make files では、他のタスクの前提条件として使用できます。たとえば、このルールを一番上(変数宣言の後)に追加すると、次のようになります。

all: $(PROGS)

リストに追加すると、すぐに入力できるようall.PHONY:なり、makeリスト内のすべてのエントリはその$(PROGS)ルールを使用して作成されます%: %.c。これはmakeの前提条件でallあり、allファイルの最初の規則であるためです。指定しないと、デフォルトで使用されます(つまり、make hello「hello」プログラムの構築に引き続き使用できます)。

おすすめ記事