0

app.c

#include "app.h"

app.h

#include "model/world.h"
#include "controller/controller.h"

app.omakefile にターゲットを書き込むにはどうすればよいですか? 3 つのヘッダーすべてを前提条件に含める必要がありますか?

4

3 に答える 3

0

はい、app.o の再コンパイルが必要な可能性がある app.c のすべての依存関係をリストする必要があります。

g++ -MM app.c が役立つ場合があります。 -MM は、app.c のすべての依存関係を make 形式で一覧表示します。それを自動化し、メイクファイルで依存関係を半自動的に処理することもできます。

于 2013-05-01T11:42:44.803 に答える
0

いいえ、ヘッダーを依存関係としてリストするべきではありません! #includeこれは、ディレクティブの形式で既に存在する仕様と重複しています。そして遅かれ早かれ冗長性は通常、問題を引き起こします。プロジェクトが大きくなるにつれて、一貫性のないリストになってしまうからです。

また、ヘッダー ファイルだけが依存関係にあるという素朴な誤解も広まっています。コマンド ライン スイッチの変更、コンパイラの変更、ハードウェア アーキテクチャの変更など、他の多くの理由が見過ごされるため、これは間違ったビルドにつながる可能性があります。

両方の問題の解決策は、信頼できるビルド ツールを使用することです。makeppはこれらのケースを処理し、起動時にまだビルドされていないインクルード ファイル内のサブ インクルードをスキャンすることもできます。

makeppには他にもたくさんあります。GNU make でできることのほとんどすべてを実行する以外に、もっと便利なことがたくさんあります。また、Perl プログラミングを使用して makefile を拡張することもできます。

于 2013-05-01T15:34:07.133 に答える
0
app.o : app.c app.h model/world.h controller/controller.h
    gcc -c app.c 

はい、依存関係として 3 つのヘッダーすべてを含める必要があります。Makefiles: の右側:が変更された場合は、左側のものを作り直す必要があります。コントローラーのバグを修正し、関数の 1 つから 3 つの引数を削除し、アプリがコントローラーからその関数を呼び出す場合、変更に対処するためにアプリを作り直す必要があります。

そうしないと、アプリがコントローラーに近づいて、5 つの引数を指定して関数 X を要求したときに、新しく改良されたコントローラーは、アプリが何について話しているのかわかりません。エラーがスローされます。いたるところに火と血。そして、それはすべて涙で終わります。

于 2013-05-01T14:02:53.057 に答える