linuxにおけるmakeのルールに関する特性

1857 ワード

makefileはshellコマンドのセットをリストする簡単な方法だと思っていました.時間が経つと、それらがどれほど強く、柔軟で、機能がそろっているかがわかりました.この文章はあなたにルールに関するいくつかの特性を理解させます.
ルール#ルール#
ルールは、makeがターゲットと呼ばれるファイルをどのように構築すべきかを示す命令です.ターゲットは、前提と呼ばれる他のファイルに依存することができる.
makeがステップ別にターゲットを構築する方法を示します.それは、出現順に1つのshellコマンドを一度に実行することです.構文は次のようになります.
target_name : prerequisites

ルールを定義すると、コマンドラインから次のコマンドを実行してターゲットを構築できます.
$ make target_name

ターゲットが構築されると、前提が変更されない限り、makeはこのステップを実行するのに十分に賢くなります.
前提条件の詳細
前提は2つのことを示しています.
  • ターゲットが構築されるべきである場合:そのうちの1つがターゲットを更新した場合、makeは目的が構築されるべきであると仮定する.
  • の実行順序:makefileで別のルールによって構築されることが前提であるため、実行ルールの順序も同様に示唆される.

  • 順序を定義したいが、前提が変更されたときに目標を再構築したくない場合は、特別な「順序のみ」という前提を使用することができます.この前提は通常の前提の後に置かれ、パイプ記号(|)で区切ることができます.
    スタイル
    便宜上、makeはターゲットと前提のスタイルを受け入れます.%記号を含めることでスタイルを定義できます.この記号は、任意の長さの文字記号またはスペースに一致するワイルドカードです.以下に例を示します.
  • %:任意のファイルに一致する
  • %.md:すべてに一致する.md末尾のファイル
  • prefix%.go:prefixで始まるすべてに一致する.go末尾のファイル
  • 特殊な目標
    一連のターゲット名があり、makeにとって特別な意味を持ち、特殊なターゲットと呼ばれています.
    このドキュメントでは、特別なターゲットを見つけることができます.経験則として、特殊な目標は点から始まり、大文字に続く.
    以下に、いくつかの有用な特殊な目標を示します.
  • .PHONY:makeにこのターゲットを示す前提は偽ターゲットと見なすことができる.これは、makeが常に実行されることを意味します.その名前のファイルが存在するかどうか、または最後に変更された時間が何であれ.
  • .DEFAULT:ルールが指定されていないターゲットに使用されます.
  • .IGNORE:もしあなたが指定したら.IGNOREを前提として、makeは実行ステップのエラーを無視します.

  • 代替
    指定した変更方法で変数の値を変更する必要がある場合は、代わりに便利です.
    代替フォーマットは$(var:a=b)であり、変数varの値を取得し、最終的な文字列の代わりに値の中のbを代名詞の末尾の各aに置き換えることを意味する.例:
    foo := a.obar : = $(foo:.o=.c) # sets bar to a.c
    

    ファイル
    アーカイブファイルは、複数のデータドキュメント(圧縮ファイルのような概念)を1つのファイルに一緒に収集するために使用されます.これらはar Unixツールによって構築されています.Arは、任意の目的のためにアーカイブを作成するために使用できますが、静的ライブラリを除いてtarによって多く置き換えられています.
    makeでは、ターゲットまたは前提としてファイル内の個別のメンバーを使用できます.
    archive(member) : prerequisite 
    recipe