[libft]makefile簡単整理


1.コンパイル(compile)


ソースコードをコンピュータが理解できるマシン(コンポーネント)に変換するプロセス.
c言語ソースコードをコンパイルする場合、gccコンパイラ-cオプションをコンパイルすると、ターゲットファイル(objectfile)が生成されます.-cは、与えられたファイルをパラメータにコンパイルし、目的のファイルを生成することを意味する.

2.リンク


リンクコンパイルされたターゲットファイル(objectfile)から実行可能ファイルを作成するプロセス
このプロシージャは、ターゲットファイルをパラメータとしてコンパイラに渡すことによって実行されます.-oオプションを指定すると、Outputファイルの名前を指定できます.このオプションがない場合、a.outという実行可能ファイルが生成されます.

3. make


なぜmakeを使うのですか?


コンパイルおよびバインドするソースファイルが多数ある場合は、コマンドをすばやく実行できます.
多くのファイルの一部を変更すると、必要なコマンドのみが実行されます.
makeは、条件に従って所定のshellコマンドを実行するプログラムです.
makeコマンドが従うべき条件を含むファイルをmakefileと呼び、makeコマンドを実行すると、その場所のmakefileが検索されて取得されます.

4. Makefile

target ... : prerequisites ...
(tab)	recipe
makefileは基本的に上記の3つの要素から構成されています😀
それぞれを知っておきましょう.

4.1. target

make allmake cleanなど、makeを実行するときに何をするかを目標(target)と伝えます.
ユーザがmake allを入力すると、allがターゲット内で検索され、対応するコマンドが実行される.

4.2. recipes


makeがターゲットを指定したときに実行するコマンドをリストします.
recipe位置にコマンドを書く必要がある場合は、タブを1回でmakefileを正しく読み取ることができます!

4.3. prerequisites


特定のターゲットを作成するときに使用されるファイルのリストで、依存ファイル(dependency)とも呼ばれます.
ターゲットの変更時間が指定したファイルの変更時間より遅い場合は、ターゲットのコマンドは実行されません.

4.4. Makefileの変数


makefile内で変数を定義することもできます.
たとえば、このタスクを実行し、makefileで次の変数を指定します.
CC = gcc
CFLAGS = -Werror -Wextra -Wall -I.
変数を指定すると、makefile内でCCを使用すると、その変数の文字列はgccに変換されます.なお、変数を使用する場合、$(CC)のような使用する変数の名前を$()に含めるだけでよい.😄

+)Makefileで変数を定義する2つの方法

  • 2=の使用方法
    定義に他の変数が含まれている場合、変数を定義する前に変数の値を決定できません(変数の定義順序に拘束されたくない場合)
  • .
  • 2:=の使用方法
    時刻変数の値のみをチェック(たとえば、自分を変更したい場合)
  • 4.5. PHONY


    makefileに次のコマンドを追加するとします.
    clean:
    	rm -f $(OBJS)
    実際に、ディレクトリにcleanというファイルが作成された場合、make cleanコマンドが受信された場合どうなりますか?
    makeにはcleanの依存ファイルはありません.cleanファイルが存在するため、cleanファイルは常に最新とみなされ、コマンドは無視されます.
    このような事態を防止するために、cleanはPHHONYとして登録すべきで、以下の通りである.
    .PHONY: clean

    4.6. パターンを使用したMakefileの作成


    モードを使用すると、特定の条件を満たすファイルにrecipeを簡単に記述できますが、ターゲットと前提部分にのみ使用できます.😉%.o:ワイルドカードの場合、*.oになります.すなわち.oで終わるファイル名を表す
    $@:ターゲット名に対応$<:依存ファイルリストの最初のファイルに対応$^:依存ファイルのリスト全体に対応$?:ターゲット位置より更新された依存ファイルに応答$+:$^と似ていますが、重複するすべてのファイル名が含まれています.

    5.その他の参考サイト


    https://velog.io/@hidaehyunle/Makefile-共通-構文-クリーンアップ
    https://modoocode.com/311