DEBUG = -g

CC = gcc # GNU C Compiler

CMD = suiron

OBJS = suiron.o subgoal.o resol.o rule.o atom.o symbol.o gainen.o io.o gbank.
o viewpoint.o

.c.o :
$(CC) -Wall $(DEBUG) -c $<

$(CMD) : $(OBJS)
$(CC) -o $@ $(OBJS) -lm $(DEBUG)

gainen.o: gainen.h
gbank.o : gainen.h
symbol.o: gainen.h symbol.h
atom.o : gainen.h symbol.h atom.h
rule.o : gainen.h symbol.h atom.h rule.h
subgoal.o : gainen.h symbol.h atom.h rule.h subgoal.h
resol.o : symbol.h atom.h rule.h subgoal.h
io.o : symbol.h atom.h rule.h subgoal.h
suiron.o: gainen.h symbol.h atom.h rule.h subgoal.h
viewpoint.o : gainen.h symbol.h atom.h rule.h subgoal.h

all :

clean :
rm -f [A-z]*~
rm -f *.o
rm -f a.out
上のようにmakefileがあって、gainen.cを更新したとするとどのようにmakeでコンパイルしたらいいでしょうか?
Makefileはよくわからないです

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>gainen.cを更新したとするとどのようにmakeでコンパイルしたらいいでしょうか?



Makefileが置いてあるフォルダに移動して
% make
または
% make all
または
% make suiron

>Makefileはよくわからないです

よく判らなくても簡単にmakeする為にあるのがMakefile。

Makefileの中身が間違ってないのなら、そのまま使えば問題無い。

て言うか、Makefileが良く判らないなら、理解出来るまで下手にMakefileを変更しない事。

Makefileは「ファイルの依存関係」と「依存されたファイルと依存するファイルの新旧の関係を正常な関係に維持する為のコマンドライン」が書いてあるだけなので、意外と簡単なんだが。

つまり

・実行ファイルはオブジェクトファイル(.o)よりも新しくなくてはならない
例)
$(CMD) : $(OBJS)

・オブジェクトファイル(.o)はソースファイル(.c)よりも新しくなくてはならない
例)
.c.o :

・オブジェクトファイル(.o)はヘッダファイル(.h)よりも新しくなくてはならない
例)
gainen.o: gainen.h
gbank.o : gainen.h
symbol.o: gainen.h symbol.h
atom.o : gainen.h symbol.h atom.h
rule.o : gainen.h symbol.h atom.h rule.h
subgoal.o : gainen.h symbol.h atom.h rule.h subgoal.h
resol.o : symbol.h atom.h rule.h subgoal.h
io.o : symbol.h atom.h rule.h subgoal.h
suiron.o: gainen.h symbol.h atom.h rule.h subgoal.h
viewpoint.o : gainen.h symbol.h atom.h rule.h subgoal.h

って書いてある。

そして、その次の行に「新しくする時に実行すべきコマンドライン」が書いてある。「新しくする時に実行すべき事が何もない」なら「コマンドライン」は書かれない。

例えば
$(CMD) : $(OBJS)
には
$(CC) -o $@ $(OBJS) -lm $(DEBUG)
を実行するように書いてある。

例えば
gainen.o: gainen.h
の次の行にコマンドラインが無いので、特に何もしない。単に、gainen.oとgainen.hのどっちが古いか調べ、gainen.oが古ければgainen.oを作り直そうとするだけ。

悩むほど難しくは無いのだけど。
    • good
    • 0
この回答へのお礼

ご丁寧な回答ありがとうございました。参考になります。マクロ定義で書いてあったのでわかりそうでわからないようなきがします。

お礼日時:2009/05/14 15:15

gainen.c の変更によって影響を受けるものをコンパイルするだけなら単に make でいいはず. そうでないなら「どのような結果が欲しいのか」をちゃんと書いてください.


しかしひどい Makefile だなぁ. 自分と関係ないファイルまで消しちゃうのか....
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2009/05/14 15:16

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報