Makeはプログラムのビルドプロセスを自動化するためのツールです。
簡単な使い方をメモしておきます。
目次
Makefileの作成
まず、Makefile
を作成します。
Makefile
はターゲット
とルール
から構成されます。
ターゲットは通常、生成されるファイル(例えば、実行可能ファイルやオブジェクトファイル)を指します。
ルールは、そのターゲットを構築するために必要なコマンドと、そのターゲットの依存関係を指します。
基本的なMakefileの形式
Makefile
target: dependencies command
- target:実行したいアクションの名前など。
- dependencies:ターゲットが依存するターゲットのリスト。
- command:ターゲットを生成するために実行するコマンド。タブでインデントされている必要があります。
このメモではサンプルコードの
タブでインデントされていないと実行できずエラーとなります。
command
の前がスペースとなっていますが、実際はタブでインデントするようにしてください。タブでインデントされていないと実行できずエラーとなります。
実行
echoするだけの例
Makefile
greet: echo "Hello, World!"
make greet
というコマンドを実行するとHello, World!
と出力されます。
ファイルに依存してコマンドを実行する例
ここでは、C言語をコンパイルする例としてご紹介します。
Makefile
hello: hello.c gcc -o hello hello.c
make hello
というコマンドを実行するとgcc -o hello hello.c
が実行されて、hello
という実行ファイルが作成されます。- dependenciesの部分に
hello.c
と書いてあります。- このように書くと、
hello.c
の更新状態に依存して、
hello.c
ファイルが更新された場合にのみgcc -o hello hello.c
が実行されるようになります。
- このように書くと、
Makefileの名前
Makefileの一般的なファイル名はMakefile
です(拡張子なし)。
GNU makeはデフォルトでこの名前のファイルを探すようです。
自由な名前を付けたい場合
自由な名前のMakefileを作りたい場合は実行するときに-f
オプションでファイル名を指定して実行することになります。
my.make というファイルを作成した場合
make -f my.make
便利な実行方法
ターゲットを省略して実行
.PHONYターゲット
というものを作成すると、make
コマンド実行時にターゲットを省略できます。
ここで指定したターゲットがデフォルトで実行されます(例としてGo言語のビルドを実行しています)。
Makefile
.PHONY: build build: go build -o myprogram main.go
一括で実行
Makefile
.PHONY: windows linux darwin windows: GOOS=windows GOARCH=amd64 go build -o myprogram_win.exe linux: GOOS=linux GOARCH=amd64 go build -o myprogram_linux darwin: GOOS=darwin GOARCH=amd64 go build -o myprogram_mac
.PHONY
に複数のターネットを指定しているので、すべての実行ファイルが生成されます。
それぞれ分けて実行する場合
上記のMakefile
を用意した状態で、以下コマンドを実行します。
make windows # Windows向けの実行可能ファイルを生成 make linux # Linux向けの実行可能ファイルを生成 make darwin # macOS向けの実行可能ファイルを生成