読者です 読者をやめる 読者になる 読者になる

はむはむエンジニアぶろぐ

このブログのコンセプトは"ハッキングの為なら愛する家族を傷つけることをいとわない" 自分にとってエンジニアリングは "手段ではなく生きる目的" である

Makefile入門

Makefile C

f:id:secret_hamuhamu:20150423012732j:plain
Makefile使ってますか?
私はよく使います。一番好きなコマンドは、もちろん make です。
よく使ってるのだけれども、基本を抑えずに使用しているのでMakefileの基本を調べてみた。

Makefileの書き方

Makefileは、一連の処理手続きを一つにまとめたものです。
Makefileの記述です。

ターゲット: 必須項目
    実行コマンド

ターゲットと必須項目と実行コマンドの3要素からなりこれらをまとめてルールと呼ぶ。
実行コマンドの前のスペースはTabです。

makeの名の通り料理に例えられることがあります。

ターゲットが作りたいもの。
必須項目が、食材。
実行コマンドが、レシピ。

抽象的に考えるとイメージついたのではないでしょうか?

Makefileを使ってCのコードをコンパイルしてみようと思う。
hello.cというファイルを作成。

#include <stdio.h>

int main()
{
    printf("Hello, World");

    return 0;
}


Hello, Worldをするコードです。
御存知の通りCは、実行ファイルを作らないといけません。
そのためにコンパイルします。

gcc hello.c -o hello.o


これで、hello.oという実行ファイルが出来上がりました。
./hello.o で、実行!
Hello, World と出力されればOK。


Makefileコンパイルをしてみる。
Makefileを作成し、以下を記述。

hello.o: hello.c
  gcc hello.c -o hello.o


makeコマンドを実行。ターゲットを指定しなければなりません。hello.oをmakeの引数に渡します。
make hello.o
lsコマンドとかで、hello.oが出来上がっているか確認して下さい。
hello.cに変更を加えずに make hello.o をすると既にコンパイル済みだよということで、 make:hello.o' is up to date.` となります。

ちなみに make だけでも作成できます。
Makefileの先頭のルールは、デフォルトールールといいターゲットが指定されなければ、デフォルトルールが実行されます。
なので、先頭にrmするようなルールは置かず、helpとか置いてあげるといいんじゃないでしょうか?

最近読んだ本

GNU Make 第3版

GNU Make 第3版

苦しんで覚えるC言語

苦しんで覚えるC言語