私は現在、柔軟なC / C ++ビルドフレームワークに取り組んでおり、(願わくば)すぐにオープンソース化する予定です。(背景については、この質問を参照してください)。
以下のコマンドを使用して、ソース/ヘッダーファイルの#includeファイルの依存関係を生成しています。
gcc -M -MM -MF
上記と同様の方法でgcc/GNUユーティリティを使用して、実行可能ファイル(ユニットテスト+私の場合はターゲットプラットフォームのメイン実行可能ファイル)のリンカー(.oファイル)依存関係を巧みに推測する方法はありますか?現在、フレームワークは非常に多くの仮定を行っており、これらの依存関係を決定するのはかなり馬鹿げています。
nmコマンドを使用して、オブジェクトファイル内の未定義のシンボルのリストを作成できる1つのアプローチについて聞いたことがあります。たとえば、オブジェクトファイル(gcc -cを使用してコンパイルされた)でnmを実行すると、次のようになります-
nm -o module.o
module.o: U _undefinedSymbol1
module.o: U _undefinedSymbol2
module.o:0000386f T _definedSymbol
次に、これらの未定義のシンボルが定義されている他のオブジェクトファイルを探して、ファイルを正常にリンクするために必要なオブジェクトファイルの依存関係のリストを作成します。
これは、実行可能ファイルのリンカー依存関係を決定する際のベストプラクティスと見なされますか?これらの依存関係を推測する他の方法はありますか?ソリューションを提案するときは、すべてのオブジェクトファイルがすでに存在している(つまり、gcc -cを使用してコンパイルされている)と想定します。