Makefileを簡単に知ることができます


マクロ置換
$(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ファイル名(*.c):Defaultを使用してoutファイルを生成します.(ex a.out)
  • gcc-cファイル名(*.c):オブジェクトファイルを生成します.
  • gcc-cオブジェクトファイル名(.o)ファイル名(.c)
    gcc-o実行可能ファイル名(*.out)オブジェクトファイル名(*.o)
  • gcc-o実行可能ファイル名(*.c):実行可能ファイルを作成します.(3行)
  • もし、もし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 $@ $^
    間違ったところがあったら教えてください…!