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.
2024-08-14 11:00:26 32400