Makefileを簡単に知ることができます
マクロ置換
$(MACRO NAME:OLD=NEW)と同じフォーマットを使用します.
MY_NAME = chanyoungkim
CADET_NAME = $(MY_NAME:chanyoung=chany)
例えば、chanyoungという部分はchanyになります.すなわち、CADET NAMEにおけるマクロの値はchanykimである.
これをmakefileと見なすと、
SRCS .c街oになります.以下のようになります.
OBJS = main.o intra.o oasis.o
gccコンパイル
ソース:https://jangpd007.tistory.com/220
https://bowbowbow.tistory.com/12 gccファイル名(*.c):Defaultを使用してoutファイルを生成します.(ex a.out) gcc-cファイル名(*.c):オブジェクトファイルを生成します. gcc-cオブジェクトファイル名(.o)ファイル名(.c)
gcc-o実行可能ファイル名(*.out)オブジェクトファイル名(*.o) gcc-o実行可能ファイル名(*.c):実行可能ファイルを作成します.(3行) もし、もし
gccオプション
ソース:https://seamless.tistory.com/2
-cソースファイルのみをコンパイルし、リンクを実行せず、オブジェクトファイルを作成します.
-oバイナリ形式の出力ファイル名を指定します.そうしないと、デフォルト名a.outが使用されます.
-Iヘッダファイルを検索するディレクトリリストを追加します.
-Lライブラリファイルを検索するディレクトリのリストを追加します.
-lコンパイル時にライブラリファイルをリンクします.
makefile内部構造
形式
(出典:https://www.oreilly.com/library/view/managing-projects-with/0596006101/ch02.html)
$@:ターゲットのファイル名を表します.
$%:アーカイブ・メンバーのファイル名要素を指定します.
$<:最初の仮定条件のファイル名.
$? : すべての必須コンポーネントの名前(ターゲットよりも新しい)をスペースで区切ります.
$^:スペースで区切られたすべての必須コンポーネントのファイル名.このリストは重複するファイル名を排除するため、コンパイルやレプリケーションなどの多くの用途で使用できるため、重複するファイル名は必要ありません.
$+:$^と同様に、スペースで区切られたすべての前置条件の名前です.ただし、$+には重複項目が含まれています.この変数は、繰り返し値の意味を持つリンクパラメータなど、特定の状況に対して作成されます.
$*:宛先ファイル名の行.ローは通常、接尾辞のないファイル名です.アレイ規則以外の使用は推奨されません.
プロシージャの作成
.cファイル.oファイルを作成します.oファイルをターゲット名にパッケージ化する.
$(MACRO NAME:OLD=NEW)と同じフォーマットを使用します.
MY_NAME = chanyoungkim
CADET_NAME = $(MY_NAME:chanyoung=chany)
例えば、chanyoungという部分はchanyになります.すなわち、CADET NAMEにおけるマクロの値はchanykimである.
これをmakefileと見なすと、
SRCS = main.c intra.c oasis.c
OBJS = $(SRCS:.c=.o)
このように書くことができます.SRCS .c街oになります.以下のようになります.
OBJS = main.o intra.o oasis.o
gccコンパイル
ソース:https://jangpd007.tistory.com/220
https://bowbowbow.tistory.com/12
gcc-o実行可能ファイル名(*.out)オブジェクトファイル名(*.o)
gcc -c -o main.o main.c
もしそうであれば、-cオプションはオブジェクトファイルを作成するオプション、-oオプションは作成するファイル名を指定するオプションです.cファイル名、oを入れる必要はありません.自動的にoとして生成されますが、実行可能ファイルを生成するときに-oオプションを追加しない場合、すべてのファイルはa.outと命名されるため、複数の実行可能ファイルを作成する必要がある場合に有効なオプションです.gccオプション
ソース:https://seamless.tistory.com/2
-cソースファイルのみをコンパイルし、リンクを実行せず、オブジェクトファイルを作成します.
-oバイナリ形式の出力ファイル名を指定します.そうしないと、デフォルト名a.outが使用されます.
-Iヘッダファイルを検索するディレクトリリストを追加します.
-Lライブラリファイルを検索するディレクトリのリストを追加します.
-lコンパイル時にライブラリファイルをリンクします.
makefile内部構造
形式
target : dependency
command
-----------------------------------------
$(TARGET) : $(OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS)
じどうへんすう(出典:https://www.oreilly.com/library/view/managing-projects-with/0596006101/ch02.html)
$@:ターゲットのファイル名を表します.
$%:アーカイブ・メンバーのファイル名要素を指定します.
$<:最初の仮定条件のファイル名.
$? : すべての必須コンポーネントの名前(ターゲットよりも新しい)をスペースで区切ります.
$^:スペースで区切られたすべての必須コンポーネントのファイル名.このリストは重複するファイル名を排除するため、コンパイルやレプリケーションなどの多くの用途で使用できるため、重複するファイル名は必要ありません.
$+:$^と同様に、スペースで区切られたすべての前置条件の名前です.ただし、$+には重複項目が含まれています.この変数は、繰り返し値の意味を持つリンクパラメータなど、特定の状況に対して作成されます.
$*:宛先ファイル名の行.ローは通常、接尾辞のないファイル名です.アレイ規則以外の使用は推奨されません.
プロシージャの作成
.cファイル.oファイルを作成します.oファイルをターゲット名にパッケージ化する.
OBJ = $(SRC:.c=.o)
$(NAME) : $(OBJ)
$(CXX) $(CXXFLAGS) -o $@ $^
間違ったところがあったら教えてください…!Reference
この問題について(Makefileを簡単に知ることができます), 我々は、より多くの情報をここで見つけました https://velog.io/@naranghae/알아두면-편한-Makefileテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol