1 つのヘッダー ファイルを含む 2 つのソース ファイルがあるとします。交流:
#include "ab.h"
int a() {
return RETURN_VAL;
}
紀元前:
#include "ab.h"
int b() {
return !RETURN_VAL;
}
ab.h:
#define RETURN_VAL (0)
ac と bc の 1 回の呼び出しでコンパイルできる makefile が必要です ab.h が新しいか、ac と bc が両方とも新しい場合は、次のようにします: gcc -c ac bc touch ab.timestamp そうでない場合は、古いものだけを再コンパイルしますファイル。
これは小さな例です。スケーリングできるものが必要です。これを解決しようとしましたが、方法がわかりません。
これは C を使用した例ですが、実際の使用は大規模な HDL プロジェクトのコンパイルです。HDL コンパイラの呼び出しには高いオーバーヘッドがあるため、ツールをファイルごとに個別に呼び出すよりも、多くのファイルに対して 1 回呼び出す方がはるかに優れています。
私が試したことは次のようなものです:
a.c: ab.h ;
b.c: ab.h ;
ab.timestamp: a.c b.c
gcc -c $?
touch ab.timestamp
これは機能しません。代わりに、次のようなものが必要です。
ab.timestamp: a.c b.c ab.h
gcc -c a.c b.c
touch ab.timestamp
これは私が望んでいないことです。$? 再コンパイルする必要がある正しいファイルを示します。$(if および $(filter 関数を使用してこれを把握できることはわかっていますが、もっとシームレスなものを望んでいました。
私はGNU Makeを使用しています。
ありがとう、ナチュム