Makefileの依存関係gcc -MM
を解決するために多くの方法が使用されているのを見てきました。sed
include
qmake
automake
info make
たくさんの選択肢があり、どれを選べばよいか迷ってしまいます。だから、最近の Makefile の依存関係を解決する一般的な方法は何ですか? この問題に対処する最善の方法は何ですか?
PS: C/CPP プロジェクト。
一般に、GNU make と gcc をサポートするシステム (最近のすべての Linux バリアントとほとんどの UNIX ライク システムなど) だけに関心がある場合は、gcc のさまざまな-M
フラグを使用して依存関係を生成し、それ-include
を Makefile に記述します。この質問には良い情報があります。通常、sed やより複雑なツールを使用する必要はありません。
(コメントで指摘したように)多くのLinuxディストリビューションのみをサポートする必要がある場合は、automake/autoconf
スイートをお勧めします.
この回答は、あなたが一般的な質問をしているだけで、解決しなければならない具体的な問題がまだわかっていないことを前提としています。
編集:
GNU make だけで、独自のプロジェクト内で依存関係の生成を処理できます。
autoconf
サードパーティのライブラリ、ツール、またはシステム機能に対するオプションまたは代替の依存関係を処理します。 automake
はマクロautoconf
を提供しますが、それらの一部は、他の方法で なしで使用している場合でも役立つことがありますautomake
。
完全に開始することの副次的な利点はautomake
、makefile が (規則と移植性の点で) 完全に予測どおりに動作し、注意を払う必要がないことです。
したがって、私の謙虚な推奨事項です。
C/C++ プロジェクトの make 互換の依存関係を生成するには、いくつかの方法があります。
gcc -M
#include
、いくつかのフレーバーがあり、実際のコンパイラを使用して依存関係を生成するため、精度の点で一種の「ゴールドスタンダード」であり、コンパイラ自体よりもステートメントの処理方法をよく知っている人はいますか?makedepend
、これは一般に、コンパイラによって生成された依存関係を優先して推奨されません。fastdep
、より高速であると主張する別のサードパーティの依存関係ジェネレーターgcc -M
。しばらく前に、これらのオプションのいくつかのパフォーマンスを比較しました。
免責事項: 私は ElectricAccelerator のアーキテクト兼主任開発者です。