【Make】Makefileの基本
目次
Makefileの基本
コメント
#
から行末までがコメントになります
改行
- 1行で1処理を記述する必要があります。もし長めの記述をする必要がある場合は
\(バックスラッシュ)
をつけることで改行を挟むことで1行として認識されます。
例
main.cpp
とsub.cpp
をコンパイルして、実行ファイルをmain
にする処理を改行
して見やすいように記述してコンパイルする場合、以下のようになります。
注意
コメントアウトを\
を使っている途中に記述すると処理として正常に認識してくれません
基本記法
- ターゲット : 一連の処理の名前、そのターゲットが作成するファイル名や行う処理の総称を記述することが多い
処理 : 処理を記述する場合、1行ごとに
タブ
を先頭に入れる必要があります。makefileはタブ
のあとに続く記述を処理として認識する仕様になっています。\
をつけている場合はタブは必要ありません問題ありません
\
をつけて処理を改行している場合、次の行の処理にタブ
はつけてもつけなくて
も問題ありません。しかし、可読性の問題を考えると整形はしておいたほうがいいと思います。
処理名など実在しないものをターゲット名にする場合
.PHONY: ターゲット名
をコマンドの前に記述することでそのターゲット名は処理の名前で、そのターゲット名のファイルやディレクトリを作成するわけではないということを宣言できます。- このようなターゲットを
タスクターゲット
と呼びます。 - タスクターゲットは
.PHONY
で宣言せずに作成することもできます。しかし、可読性が落ちる可能性があるので.PHONY
で宣言してから作成したほうがいいと思います。
build
という仮想ターゲット名を持った処理を作成する場合
依存ターゲット
依存ターゲットとは、ターゲット: 依存ターゲット
のようにターゲット:
のあとに記述するターゲット(ファイル名)のことです。
通常、ターゲットに指定したファイルがない場合のみ、ターゲットが実行されます。すでにターゲット名のファイルがある場合、以下のような表示になります。
- makefile
- 実行結果
依存ターゲットにファイルを指定している場合、指定したファイルのタイムスタンプとターゲットファイルのタイムスタンプを比較して、ターゲットファイルのタイムスタンプが古い場合、再度コマンドが実行されます。
- main.cppが更新されていれば処理が実行されます。
【Make】Makefileの基本
https://daiki-iijima.github.io/2021/10/27/【Make】Makefileの基本/