プログラム開発の支援

Make

Makefile に記述されたソースプログラムファイルと目的ファイルの 依存関係と構築法を読んで、変更のあったソースファイルに 関係するところのコンパイルを行う。プログラムのメンテナンスサイクルは 次のようになる。
think - edit - make - test ...
Makefile の記述法
target ...: [依存関係(file)]
	[構築方法(command)]
	....
構築方法の前には[TAB]を置く。(spaceではだめ) つまらない Makefileの例
testfile:
	ls testfile
	touch testfile
	ls testfile
Cプログラムをコンパイルするための Makefileの例
# Makefile example
go: go.c
	cc -o go go.c
ターゲット作成に必要なファイルを別のターゲットとして 書くことができる。
# Makefile example
batch: a b
	cat a b > batch
b:
	echo "b" > b
a:
	echo "a" > a
c:
	echo "ccc"
実際のプログラムでは複数の C ソースファイルから一つの 実行ファイルを作成することが多い。
# Makefile example
program: main.o data.o
	cc -o program main.o data.o
main.o: main.c
	cc -c main.c
data.o: data.c
	cc -c data.c
clean:
	rm program main.o data.o
main.c または data.c のどちらかに変更があった場合には、 対応する .o ファイルがコンパイルによって作られ、program は main.o と data.o を結合して作られる。 最後の2つのターゲットは中間ファイルと実行ファイルの 削除に用いられる。

暗黙のルールの利用

COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
LINK.c=$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# Makefile example
CC=gcc
CFLAGS=-O
LDFLAGS=-lm

objs=main.o data.o

program: $(objs)
	$(CC) $(LDFLAGS) -o program $(objs)
main.o: main.c program.h
data.o: data.c program.h
clean:
	rm program $(objs)

Lint

文法のチェック

プログラムの効率解析

time, prof, gprof, tcov

ライブラリの作成

ar, ranlib

共有ライブラリ