概要
makeファイルについてのまとめ
makeとは
makeは主にCやC++などのコンパイル型言語で記述されたプログラムを用意にビルドするためのツール。
「$ gcc -Wall -I../common/ -I. -DUTIL -g」とか毎回記述するのが面倒なので一つのコマンドでビルドを実行します。
最近ネットで見たのですがGolangでも良く使われているようですね。
面白い記事を見たので紹介します。
Golang を使うなら Makefile を恐れるな
GNU Makeのサイト
https://www.gnu.org/software/make/
makeを使ってみる
今回使用しているバージョンは下記です。
macならデフォルトで入ってます。
$ make --version
GNU Make 3.81
基本情報
Makefileの基本形は下記の通り。
インデントは、スペースではなく、必ずタブにしてください
[変数名] = 値
[作りたいもの]: [材料]
(-----TAB-----) [作り方]
makeを試す
先ずは一つのファイルのコンパイルとバイナリ削除までを試します。
ソースは以下。
#include <stdio.h>
int main(int argc, char **argv)
{
fprintf(stdout, "Hello World!\n");
return 0;
}
これをコンパイルしたりバイナリ削除したりするのはまだ容易です。
本領を発揮するのはまだですがそこまではとりあえず基本。
CC = /usr/bin/gcc
hello:
$(CC) -o hello hello.c -g
clean:
rm -f hello
上記ファイルを元にmakeを実行してみます。
今回はターゲット名にhelloと記載したので「make hello」として実行します。
$ make hello
/usr/bin/gcc -o hello hello.c
$ ls
Makefile hello hello.c
$ make clean
rm -f hello
$ ls
Makefile hello.c
次は複数ファイル同時にコンパイルとバイナリ削除の例です。
ターゲット名をallとしています。
またここでソースごとにオプションを書くのが面倒ってことでオプションをCFLAGSに代入してます。
CC = /usr/bin/gcc
CFLAGS = -O4 -Wall -I/usr/local/include
all:
$(CC) $(CFLAGS) -o hello1 hello1.c -g
$(CC) $(CFLAGS) -o hello2 hello2.c -g
clean:
rm -f hello1 hello2
自動変数
Makefileには文字数を減らすための仕組み自動変数がある。
変数名 | 説明 |
---|---|
"$@" | ターゲットファイル名 |
"$%" | ターゲットがアーカイブメンバだったときのターゲットメンバ名 |
"$<" | 最初の依存するファイルの名前 |
"$?" | ターゲットより新しいすべての依存するファイル名 |
"$^" | すべての依存するファイルの名前 |
"$+" | Makefileと同じ順番の依存するファイルの名前 |
"$*" | サフィックスを除いたターゲットの名前 |