1

私は最初のオープン ソース C++ プロジェクトに取り組んでいます: https://github.com/jehugaleahsa/spider-cpp

私は自分の Makefile を管理していますが、依存関係の管理方法に関する「ベスト プラクティス」の質問があります。現在、.cpp ファイルに含まれている各ヘッダー ファイルに依存する各 .o ファイルを作成しています。そう:

code.o: code.cpp code.hpp dep1.hpp de2.hpp
    g++ -c code.cpp

まず第一に、Make はオブジェクト ファイルを作成するための省略形をサポートしていると確信しています。誰かがこの例を示してくれれば、私はそれを感謝します。

次に、含まれているすべてのヘッダーを依存関係としてリストしないようにする方法はありますか? 依存関係を変更しても、変更に互換性があることを確認したいと思います。含まれているヘッダーを一覧表示するのは面倒で、簡単に台無しになります。

4

2 に答える 2

2

OP:

まず第一に、Makeはオブジェクトファイルを作成するための省略形をサポートしていると確信しています。誰かがこの例を見せてくれるなら、私はそれをいただければ幸いです。

ここから:

OBJS := foo.o bar.o

#Your program should have the objects as dependencies, and link them
proggie: $(OBJS)
gcc $(OBJS) -o proggie


# compile
%.o: %.c
    gcc -c $(CFLAGS) $*.c -o $*.o

OP:

次に、含まれているすべてのヘッダーが依存関係としてリストされないようにする方法はありますか

同じページを下に移動します。次の行を参照してください。

# pull in dependency info for *existing* .o files
-include $(OBJS:.o=.d)


# compile and generate dependency info
%.o: %.c
    gcc -c $(CFLAGS) $*.c -o $*.o
    gcc -MM $(CFLAGS) $*.c > $*.d

基本的に、これはgccの-MMオプションを使用してヘッダーファイルのリストを取得することであり、これでそれらに依存することができます。したがって、そのようなヘッダーファイルのリストを含むファイルを.dファイルに出力し、次に、ファイルのリストを依存関係として追加します。これは、-includeコマンドが実行することです。「-」は、依存関係の.dファイルがまだ存在しない場合のエラーを回避します。

.cppファイルを考慮して上記を変更する必要があることに注意してください

于 2012-09-28T16:10:08.063 に答える
0

はい、makeはオブジェクトファイルを作成するための省略形をサポートしています。これはルールと呼ばれます。そして、はい、含まれているすべてのヘッダーを依存関係としてリストすることを回避する方法があります。g ++ / gccには、依存関係の完全なリストを生成する-MMオプションがあります。

残念ながら、私がここに置くことができるそれを行う方法についての簡単な説明はありません。あなたはドキュメントを読んで、makeユーティリティで遊ぶ必要があります。この本は非常に役に立ちました:「GNUMakeを使用したプロジェクトの管理」。GNUサイトにドキュメントがありますが、少し読みづらいと思いました。www.gnu.org/software/make/manual/make.html

于 2012-09-28T16:09:26.817 に答える