15
[分割コンパイルの復習]
cc -c sample.c (sample.oというオブジェクトファイルを生成)
cc -c sub1.c (sub1.o というオブジェクトファイルを生成)
cc -c sub2.c (sub2.o というオブジェクトファイルを生成)
cc -o sample sample.o sub1.o sub2.o (sample.o sub1.o sub2.oの3つをリンク
してsampleという実行ファイルを生成)
上の4行は
cc -o sample sample.c sub1.c sub2.c と同じ.
ヘッダファイルを修正したときには,
それを include しているファイルすべてを再コンパイルする必要がある.
↓ 覚えるのは大変
↓
make の利用
13.Make
Makefileまたはmakefileというファイルに分割コンパイル時のファイルの依存関係と処
理方法を記述.
↓
部分的な変更があった場合,変更が及ぶ範囲だけを処理する.
ファイル include しているヘッダ sample.c ← config.h inc1.h inc2.h sub1.c ← config.h inc1.h
sub2.c ← config.h inc2.h makefile の例
---<ここから>---
#
# 簡単な makefile の例
#
all: sample
sample: sample.o sub1.o sub2.o
cc -o sample sample.o sub1.o sub2.o
sample.o: sample.c config.h inc1.h inc2.h cc -c sample.c
sub1.o: sub1.c config.h inc1.h cc -c sub1.c
sub2.o: sub2.c config.h inc2.h cc -c sub2.c
---<ここまで>---
トップレベルのターゲット
16
[書式]
作りたいファイル:必要なファイル と 依存関係
(TAB)ファイルを作るのに必要なコマンド
上のmakefileをsample.c sub1.c sub2.c config.h inc1.h inc2.hと同じディレクトリ におき,
make と入力すると
cc -c sample.c cc -c sub1.c cc -c sub2.c
cc -o sample sample.o sub1.o sub2.o が実行される.
このあと
a) sample.cだけを変更したとき,makeと入力すると
cc -c sample.c
cc -o sample sample.o sub1.o sub2.o
b) sub1.cだけを変更したとき
cc -c sub1.c
cc -o sample sample.o sub1.o sub2.o c) inc2.hだけを変更したとき
cc -c sample.c cc -c sub2.c
cc -o sample sample.o sub1.o sub2.o
d) config.hだけを変更したとき
cc -c sample.c cc -c sub1.c cc -c sub2.c
cc -o sample sample.o sub1.o sub2.o がそれぞれ実行される.
[補足と参考]
• sub1.oだけを生成したいときは
make sub1.o と入力すればよい.
• 上のmakefileをsample.makeというファイル名で作成したときは make -f sample.make
と入力すればよい.
• makefileの中では変数が使用可能.
17
(例)
OBJ = sample.o sub1.o sub2.o INC = config.h inc1.h inc2.h LIB = -lm
sample: $(OBJ)
cc -o sample $(OBJ) $(LIB)
sample.o: sample.c $(INC) cc -c sample.c
sub1.o: sub1.c config.h inc1.h cc -c sub1.c
sub2.o: sub2.c config.h inc2.h cc -c sub2.c
makeのより高度な利用法については各自で調べて下さい.
演習問題
11. 演習問題10 a)b)をコンパイルするためのmake ファイルの例を示せ.
12. 演習問題10 a)b)で作成した二分法とニュートン法のプログラムを,多項式用に修正
せよ.すなわち,関数を直接プログラムに書くのではなく,次数と係数(および初期 点)を入力すればよい形に改めよ.(例えば,
f ( x ) = 5 x
3+ x
2− 4 x + 2
で,初期点を0 とするのであれば,3 , 5 , 1 , − 4 , 2 , 0
のように入力する.)また,それを用いて,適当な 多項式(少なくとも4次以上で,自明ではない解であること)の解を求めなさい.演習問題10〜12の解答(ソースファイルおよび実行結果)を,11月11日(月)午後4時
までにシステム事務室へ提出しなさい.
(cc -o sample sample.o sub1.o sub2.o –lmと同じ)