foo_user.cpp が foo.h に依存している場合、foo_user.cpp がビルドされ、さらに foo.h の変更時刻が過去に設定されている場合、make は foo_user.cpp を再ビルドしません (foo.cpp が「新しい」ため)。make が依存関係の変更時間を記録し、それらが変更された場合 (新しいか古いか)、その依存関係のターゲットが古くなっていると見なすことをお勧めします。GNUはこれを行うことができますか? そうでない場合、簡単な代替手段はありますか?
この状況がどのように発生するのか興味がある場合: foo.h はシンボリックリンクされたフォルダーにあります。シンボリック リンクは、foolib-1.0 フォルダー、foolib-2.0 フォルダーなどを指している場合があります。シンボリック リンクが別のバージョンのライブラリを指している場合、古いバージョンであっても、foo_user.cpp を再構築する必要があります。単純に symlinkfolder/foo.h を foo_user.cpp の依存関係として指定すると、make は foo.h のタイムスタンプのみに注意を払い、foo.h がアクセスされるシンボリックリンクのディレクトリのタイムスタンプには注意を払いません。make ルールはコンパイラによって生成されるため、シンボリック リンク自体を依存関係として追加することはできません (GCC には、ソース ファイルが依存するすべてのヘッダーの make ルールを出力する特別なフラグがあります)。