makefileの基本

makefileはソースコードを複数に分割して開発を行うときに重宝されます。
ファイル間の依存関係を維持しながら、部分的にコンパイルを繰り返すことができるからです。


/* main.c */
#include"myheader.h"

//外部ファイルに内容は記述
extern void aisatsu(char *string);

int main()
{
aisatsu("Hello.\n");
return 0;

}



/* myheader.h*/
#include<stdio.h>
#include"myheader.h"

void aisatsu(char *string)
{
//引数が参照する文字列を標準出力へ表示する
printf("%s", string);
}


/* myheader.h */
// nothing



以下はmakefileです。

#makefile
# compiler
CC=gcc

# Where to install
INSTDIR=/usr/local/bin

# Where are include files kept
INCLUDE=.

# Options for development
CFLAGS=-g -Wall -ansi

aisatsu: main.o a.o
$(CC) -o aisatsu main.o a.o
main.o: main.c myheader.h
$(CC) -I$(INCLUDE) -c main.c
a.o: a.c myheader.h
$(CC) -I$(INCLUDE) -c a.c
clean:
-rm main.o a.o
install: aisatsu
@cp aisatsu $(INSTDIR);
@chmod a+x $(INSTDIR)/aisatsu;
@echo "Installed in $(INSTDIR)"


#makeを実行
$ make
gcc -I. -c main.c
gcc -I. -c a.c
gcc -o aisatsu main.o a.o


#オブジェクトファイルのお掃除
$ make clean 
rm main.o a.o

#インストール
#管理者権限の必要なコマンドが含まれるため怒られる
$ make install 
gcc -I. -c main.c
gcc -I. -c a.c
gcc -o aisatsu main.o a.o
cp: 通常のファイル `/usr/local/bin/aisatsu' を作成できません: Permission denied
make: *** [install] エラー 1

#管理者権限で実行
$ sudo make install 
[sudo] password for yumiko: 
Installed in /usr/local/bin


#コマンドを実行
#/usr/local/binにはパスがデフォルトで通っているため、実行ファイル名だけを入力すればよい。
$ aisatsu
Hello.