4

Makefileの依存関係gcc -MMを解決するために多くの方法が使用されているのを見てきました。sedincludeqmakeautomakeinfo make

たくさんの選択肢があり、どれを選べばよいか迷ってしまいます。だから、最近の Makefile の依存関係を解決する一般的な方法は何ですか? この問題に対処する最善の方法は何ですか?

PS: C/CPP プロジェクト。

4

3 に答える 3

1

一般に、GNU make と gcc をサポートするシステム (最近のすべての Linux バリアントとほとんどの UNIX ライク システムなど) だけに関心がある場合は、gcc のさまざまな-Mフラグを使用して依存関係を生成し、それ-includeを Makefile に記述します。この質問には良い情報があります。通常、sed やより複雑なツールを使用する必要はありません。

于 2012-06-01T16:57:59.753 に答える
0

(コメントで指摘したように)多くのLinuxディストリビューションのみをサポートする必要がある場合は、automake/autoconfスイートをお勧めします.

この回答は、あなたが一般的な質問をしているだけで、解決しなければならない具体的な問題がまだわかっていないことを前提としています。

編集

GNU make だけで、独自のプロジェクト内で依存関係の生成を処理できます。

autoconfサードパーティのライブラリ、ツール、またはシステム機能に対するオプションまたは代替の依存関係を処理します。 automakeマクロautoconfを提供しますが、それらの一部は、他の方法で なしで使用している場合でも役立つことがありますautomake

完全に開始することの副次的な利点はautomake、makefile が (規則と移植性の点で) 完全に予測どおりに動作し、注意を払う必要がないことです。

したがって、私の謙虚な推奨事項です。

于 2012-06-01T16:30:49.017 に答える
0

C/C++ プロジェクトの make 互換の依存関係を生成するには、いくつかの方法があります。

  • gcc -M#include、いくつかのフレーバーがあり、実際のコンパイラを使用して依存関係を生成するため、精度の点で一種の「ゴールドスタンダード」であり、コンパイラ自体よりもステートメントの処理方法をよく知っている人はいますか?
  • makedepend、これは一般に、コンパイラによって生成された依存関係を優先して推奨されません。
  • fastdep、より高速であると主張する別のサードパーティの依存関係ジェネレーターgcc -M
  • ElectricAcceleratorにはautodepと呼ばれる組み込み機能があり、ビルドで呼び出されたコマンドのファイルシステム使用状況を使用して依存情報を生成します。代替手段に対する autodep の利点は、非常に高速であり、ツールやプログラミング言語に完全に依存しないことです。他のものはすべて C/C++ に関連付けられているか、特定のコンパイラを使用する必要がありますが、autodep はすべての種類のビルド ツールで動作します。

しばらく前に、これらのオプションのいくつかのパフォーマンスを比較しました。

免責事項: 私は ElectricAccelerator のアーキテクト兼主任開発者です。

于 2012-06-05T17:58:06.127 に答える