Home New Help Edit

makefileの書き方メモ

Suns & Moon Laboratory



CC = gcc CFLAG = DEST = /usr/local/bin PROGRAM = hello SRCS = hello.c all: $(PROGRAM) $(PROGRAM): $(SRCS) $(CC) -o $(PROGRAM) $^ -Wall clean: rm -f $(PROGRAM) install: $(PROGRAM) install -s $(PROGRAM) $(DEST)
Make
"$^" は自動変数で、必須項目をスペース区切りで展開。重複は取り除かれる。

gcc
"-o" 出力先
"-Wall" ワーニング

例 複数ソース


CC = gcc CFLAG = DEST = /usr/local/bin PROGRAM = ttytest all: $(PROGRAM) $(PROGRAM): *.c $(CC) -o $(PROGRAM) $^ -Wall clean: rm -f $(PROGRAM) $(OBJS) install: $(PROGRAM) install -s $(PROGRAM) $(DEST)

引数無しでmake実行した場合

makeは引数が無い場合、最初のTARGETが構築される。

カレントディレクトリの変更「-C」

「-C $@」
"-C" はカレントディレクトリの変更
"$@"はターゲットのファイル名

makecurdir/makefile
DIRS = fld1 fld2 .PHONY: $(DIRS) all: $(DIRS) $(DIRS): make -C $@

makecurdir/fld1/makefile
all: pwd

makecurdir/fld2/makefile
all: pwd

実行結果
[makecurdir]$ make make -C fld1 make[1]: Entering directory '/home/username/src/makecurdir/fld1' pwd /home/username/src/makecurdir/fld1 make[1]: Leaving directory '/home/username/src/makecurdir/fld1' make -C fld2 make[1]: Entering directory '/home/username/src/makecurdir/fld2' pwd /home/username/src/makecurdir/fld2 make[1]: Leaving directory '/home/username/src/makecurdir/fld2' [makecurdir]$

makeの引数

makefile
all: echo ${arg}
実行結果
$ make echo $ make arg=test echo test test $

${arg}
引数にarg=xxxxを指定した時、xxxxが渡される

自動変数


$@ターゲットのファイル名
$^すべての必須項目をスペースで区切ったリスト。重複ファイルは除去される。

参考

Makefileの解説
【初心者向け】Makefile入門

end.

Home New Help Edit
2023-03-24 09:22:19 32400