Makeコマンドリファレンス
Makefileを作成するとき、
いつもターゲットやコンポーネントを参照する内部コマンドの記号を忘れてしまう。
$?、$@、$<など、これら記号のどれが何を意味しているのか、暗記するのは至難の技。
都度、マニュアルを開くのも面倒。
それならば、Webですぐに参照できるようにしよう。
依存関係行の書式
ターゲット: コンポーネント...
コマンド1
コマンド2
...
サフィックスルールの書式
.AAA.BBB:
コマンド1
コマンド2
...
※ AAA コンポーネントのサフィックス
BBB ターゲットのサフィックス
内部マクロ
- $?
現在処理中のターゲットよりも後で変更されたコンポーネントのリスト
サフィックスルールでは使えない
- $@
現在処理中のターゲット名
サフィックスルールでも使える
- $$@
現在処理中のターゲット名
依存関係行上のコロンの右側でのみ使う
- $<
現在処理中のターゲットよりも後で変更されたコンポーネント名
サフィックスルールと.DEFAULTエントリでのみ使う
- $*
現在処理中のターゲットよりも後で変更されたコンポーネントのサフィックスを除いた名前
サフィックスルールでのみ使う
- $%
ターゲットがライブラリの場合に対応する.oファイルの名前
サフックスルールでも使える
マクロ修飾子
- D
$?を除くマクロのディレクトリ部分
${*D}、${<D}、${@D}、$${@D}などが有効な使用例
- F
$?を除くマクロのファイル名部分
${*F}、${<F}、${@F}、$${@F}などが有効な使用例
特殊なターゲット
- .DEFAULT
ターゲットを構築するまてのエントリやルールが見つからなかった場合に 実行するコマンドを指定
- .IGNORE
実行みたコマンドのエラーコードを無視
-i オプションと同じ効果
- .PRECIOUS
エラーや異常が発生してもここで指定したファイルは消去されない
- .SILENT
実行するコマンドを表示しない
-s オプションと同じ効果
- .SUFFIXES
サフィックスルールをもつサフィックスを指定
Makefileの例
ふたつのソースファイルmain.cとsub.cをそれぞれコンパイルした後にリンクして実行ファイルtestを作成するMakefileの例をつぎに示す。
.SUFFIXES: .c .o
OBJS=main.o sub.o
all: test
test: $(OBJS)
cc $(OBJS) -o $@
.c.o:
cc $< -g -c