C言語の初心者です。makeに関する質問になります。
知りたいこと
ソースファイルを修正し、毎回、make cleanすると、全ビルドとなり、ビルドの時間が掛ります。
ついては、どの様な修正の場合、make clean→全ビルドが必要で、どの様な修正の場合、make cleanは不要で、部分ビルドでOKかを知りたく。
質問の背景
make cleanを行わず、ファームウェアを生成し、そのファームウェアを動作させると、データアボートが発生しました。make cleanを行い、再ビルドしたファームウェアを動作させると、データアボートが発生しなくなりました。
ただ、make cleanを行わず、ビルドしたファームウェアを動作させ、問題ない場合もあります。
そこで、本質問をさせていただいております。
C の「ソースファイル」には、ヘッダーファイル (*.h) と実装ファイル (*.c) がありますよね。(たまに *.c だけをソースファイルと呼ぶ人もいるかも…。)
「ソースファイルAで定義していた関数XをソースファイルBでCall」する場合、実際には A.h に X の宣言、A.c に X の実装、B.c で A.h を #include して X を呼ぶ、という流れになると思います。この場合、A.h に書いた X の宣言 (引数や戻り値の型など) を修正したら B.c も再ビルドが必要になりますが、A.c に書いた X の実装 (ログ出力を追加するとか) を変更しても B.c を再ビルドする必要はありません。
このような場合、B.c をビルドしてできる B.o は A.h に依存している、という情報を Makefile に書く必要があり、そのやり方はプロジェクトによっていろいろあります。(依存関係を自動生成するツールを使うとか、全部手動でやるとか…)