ファイル間の依存関係を維持しながら、部分的にコンパイルを繰り返すことができるからです。
/* 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.