2016-11-01 5 views
0

私のプログラムに別のヘッダを含むヘッダが含まれているとどうなりますか? たとえば、main.cにはheader1.hが含まれ、header1.hにはheader2.hが含まれているとします。メイクファイルはどうすればいいですか:Makefile clarification:別のヘッダを含むヘッダを含むファイル

main.x: main.o 
    gcc -o main.x 

main.o: main.c header1.h header2.h 
    gcc -c main.c 

ORにはheader2.hを含める必要はありませんか?

main.x: main.o 
    gcc -o main.x 

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

また、ヘッダーをまったく入れる必要はありませんか?

main.x: main.o 
    gcc -o main.x 

main.o: main.c 
    gcc -c main.c 
+0

はい。すべてのヘッダーが含まれます。 gccは '-M'(および' -MM'のような関連)オプションを使って依存関係を判断します。 – Gene

+0

@ RuslanOsmanov hmmm、そうですが、この質問では、1秒後にそれが何であるかを見ています。もう1つはやや複雑な例を分析する必要があります。 –

答えて

0

Makefileで依存関係をリストのポイントはmakeは、それが再構築する必要がどのような状況の下で知らせることです。ターゲットがビルドされてから依存関係としてリストされたファイルが変更されている場合は、ターゲットを再構築する必要があります。したがって、目標を構築するための粗い目で見ているすべてのファイルをリストすることは良い考えです。

時間が含まれているファイルをリストしていないと、すべてが動作します。makeと言っていないファイルを編集するまで、makeは再コンパイルしないかもしれません。

0

(設計による)makeはCの動作について何も知らないので、すべてのインクルードファイルに依存する名前を付ける必要があります。 -MDmakeで使用するための依存関係のルールを含むファイルを生成するgccを起こし...

main.x: main.o 
    gcc -o main.x 

main.o main.d: main.c 
    gcc -MD -MF -MG -MP main.d -c main.c 

-include main.d 

include原因の前にダッシュが.dファイル、-MDが不足して無視するようにします:gccとGNUは、このためのソリューションを提供します-MFは、ファイルの名前を-MGにすると、ヘッダファイルが見つからないと仮定して作成します。-MPはヘッダファイルの偽のターゲットを作成するため、ヘッダファイルを削除しません。依存関係がないためにビルドを妨げることはありません)。

関連する問題