古い大きなコード ベースがあり、メインの機能の小さなサブセットしか必要ないため、必要な .cpps を自動的に検出する方法を探しています (それらが同じフォルダーにあり、.h ファイルと一致する名前を持っていると仮定します)。
残念ながら、まだ多くのコードが必要なので、手作業でコードを調べることは問題外です。私の「main.cpp」から移動し、必要なすべての.hファイルを再帰的に把握して、単純な文字列置換(.h -> .cpp)を実行してコンパイラに渡すツールはありますか
質問する
118 次
2 に答える
4
ほとんどのコンパイラはこれを行うことができます。たとえば、GCCやClangは、ソースファイルのすべての依存関係を一覧表示します-M
。-MM
システムヘッダーなどを除外する他のオプションがあります。詳細については、コンパイラのドキュメントを参照するか、ヘルプが必要な場合は、使用しているコンパイラをお知らせください。
ただし、アプローチには1つの問題があります。から含まれるヘッダーを把握できますが、main.cpp
問題ありませんが、ヘッダーに対応するファイルをコンパイルする場合.cpp
、これらの実装ファイルには通常、直接または間接的に含まれていない他のヘッダーが必要になります。から、それらのヘッダーのファイルmain.cpp
も必要です。すすぎ、繰り返します。:).cpp
ファイルを見つけるプロセスを手動で繰り返すことが.cpp
できない場合は、Makefileを使用できます。
CPPFILES := $(wildcard *.cpp)
DEPFILES := $(CPPFILES:%.cpp=%.d)
%.d: %.cpp
g++ -MM $< -o $@
include $(DEPFILES)
%.o: %.cpp
@echo "$@"
%.h: %.o
@:
次に電話
make main.o
そして、他にどのファイルが必要かを考えてみましょう。上記はもちろん単純化された例です。より複雑なディレクトリ構造を持っている可能性があり、おそらくいくつかのコンパイルオプションを追加する必要がありますがg++
、それが始まりであることを願っています。
于 2013-03-15T18:13:27.527 に答える