GNU make
Getting Started
公式リファレンスは↑
サードパーティーのリファレンス的資料:
- GNU make 日本語訳(Coop編) - 目次 … 1998年ぐらい。古い
- Makefileの関数 - Qiita
Quickstart
使えるMakefileの例
.PHONY: default build clean
default: build
clean:
rm -rf dist/
timestamp:
date +%s > timestamp
build: timestamp another-file
some_build_command
Tips:
- ターゲットの依存ターゲットは複数記すことができる。
参考:
Makefile 構文
変数
変数定義のやり方について。
“=” と “:=” は違う。
src = foo.c
ymd := $(shell date +%Y%m%d)
参考:
$(CURDIR)
makeを実行しているプロセスのカレントディレクトリを返す。
参考:
- https://www.gnu.org/software/make/manual/html_node/Recursion.html
- 今日のMake Tips:CURDIR変数 - 檜山正幸のキマイラ飼育記
関数
$(foreach name, LIST, command)
ループ実行
.PHONYターゲット
https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html
ファイルを生成しないやつ
.PHONY: clean
clean:
rm *.o tmp
複数の.PHONYターゲットをまとめて記述することもできる
.PHONY: all clean deps
条件分岐
7 Conditional Parts of Makefiles
Example:
libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
$
のエスケープ
シェルの文脈で $
を使いたいときは $$
と記すことで実現できる。
Examples:
time:
now=$$(date); echo $$now
参考:
makeコマンド
公式マニュアル:
SYNOPSIS:
# デフォルトのタスク(=最上部で定義されたタスク)を実行
make
# タスク名を指定して実行。複数指定可
make task1 [task2 ...]
# Makefileを指定する
make -f|--file <Makefile>
# dry-run
make -n|--dry-run
# 変数の設定
# Makefile内で定義されていれば、オーバーライドする
make CFLAGS=-g
その他のオプション:
オプション | 意味 |
---|---|
`-j | –jobs[=N]` |
`-e | –environment-overrides` |
-d | デバッグ情報を表示。 --debug=a と同じ |
--trace | 実行時のトレース情報を表示する |
`-s | –silent |
`-h | –help` |
`-v | –version` |
Tips
必要なディレクトリを作ってタスク実行
BUILD_DIR := path/to/build
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
all: $(BUILD_DIR)
cd $(BUILD_DIR) && some_commands
.PHONY: all
環境変数の取扱い
環境変数はMakeの変数として参照できる。例: $(CFLAGS)
参考:
How-to
コマンドに引数を渡したい
make CFAGS=-g
みたいに変数経由で渡すことになりそう。
参考:
Cookbooks
カレントディレクトリを表示する幾つかの方法
pwd:
pwd
echo $(shell pwd)
echo $(PWD)
echo $$PWD
echo $(CURDIR)
実行例:
$ make
pwd
/home/progrhyme/tmp/make
echo /home/progrhyme/tmp/make
/home/progrhyme/tmp/make
echo /home/progrhyme/tmp/make
/home/progrhyme/tmp/make
echo $PWD
/home/progrhyme/tmp/make
echo /home/progrhyme/tmp/make
/home/progrhyme/tmp/make
参考
- Makefileで遊ぼう 〜 階乗, フィボナッチ数, Brainfuck処理系まで - プログラムモグモグ
- 入門レベルで割とよく使う感じの機能がまとまってる。