[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 all
、make 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つの方法
=
の使用方法定義に他の変数が含まれている場合、変数を定義する前に変数の値を決定できません(変数の定義順序に拘束されたくない場合)
:=
の使用方法時刻変数の値のみをチェック(たとえば、自分を変更したい場合)
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
Reference
この問題について([libft]makefile簡単整理), 我々は、より多くの情報をここで見つけました https://velog.io/@welloff_jj/libft-makefile-간단-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol