2009-04-30 7 views
1

サポート作成するヘルプ:私はあなたには、いくつかのファイルが含まCプログラムを持っており、以下のようにいくつかのいずれかが、いくつか他の人によって構成されているMakefileの

---------------------------------------- 
File   | Included files   
---------------------------------------- 
main.c   | stdio.h, table.h 
---------------------------------------- 
list.c   | list.h 
---------------------------------------- 
symbol.c  | symbol.h 
---------------------------------------- 
table.c   | table.h 
---------------------------------------- 
table.h   | symbol.h, list.h 
---------------------------------------- 

を、メイクファイルを作成するために私を助けてあなたに感謝して下さいとても! これは私のMakefileですが、問題はありますか?誰がこれらの問題をデバッグできますか、ありがとう!

hello: main.o list.o symbol.o table.o 
    gcc -o hello main.o list.o symbol.o table.o 

main.o: main.c table.h symbol.h list.h 
    gcc -c -o main.o main.c 

list.o: list.c list.h 
    gcc -c -o list.o list.c 

symbol.o: symbol.c symbol.h 
    gcc -c -o symbol.o symbol.c 

table.o: table.c table.h symbol.h list.h 
    gcc -c -o table.o table.c 

clean: 
    rm hello *.o 

あなたの与えられたメイクファイルとの具体的な問題は、あなたがすべてにリンクしていないということです。

hello: main.o table.o 
    gcc main.o table.o -o hello 

main.o: main.c table.h 
    gcc -c main.c 

table.o: table.c table.h 
    gcc -c table.c 

symbol.o: symbol.c symbol.h 
    gcc -c symbol.c 

list.o: list.c list.h 
    gcc -c list.c 


clean: 
    rm hello *.o 
+0

paxが良いスタートを与えてくれても、彼の例はまだ仮定(つまり、 'main'実行可能ファイルはすべてのソースから関数を呼び出す)に基づいて構築されています。依存関係がはるかに複雑なので、彼の例は完全に間違っているかもしれません。 – KevinDTimm

+0

あなたが使用しているもの(GNU、BSDなど)を知っていれば、単純化される可能性があります。 また、list.oはどこかにリンクされているはずですか? – ctuffli

答えて

6

ここではない正確に専門家はそれを行うだろうか、しかし、初心者レベルのために良い、スタートですオブジェクトファイル。 main.cにはtable.htable.hにはsymbol.hlist.hが含まれているため、プログラムにはsymbol.olist.oのリンクがほとんど必要です。

これは、ヘッダの依存関係に従うこともよいでしょう(table.hは、これら2に依存しているため、例えば、main.otable.hsymbol.h/list.hに依存) - ヘッダの依存関係のための中間ファイルを取得するための「きちんとした」方法はありませんので、これはです。

標準ヘッダーは、変更が必要ないため、単純に標準ヘッダーを置くことはめったにありません。新しいコンパイラーの場合は、きれいにして新鮮なものにしてください。

+0

+1、ヘッダーの依存関係を含む、初心者のための非常に良い例です。私はgcc -Mを使ってそれらを「ちょうど良い」ものにすることはできませんでした。閉じるが、決して完璧ではない。 –

関連する問題