1

[短いバージョン] 単体テスト済みの C++ プロジェクトで、異なるフォルダーにあるにもかかわらず、同じ名前の 2 つのソース ファイルを使用できません。g++ と make はお互いに不機嫌です。(それとも私がバカなのかもしれません)

[長いバージョン] make/g++/gtest のセットアップで問題が発生しました。g++ が依存関係を自動生成すると、次のようなものが生成されます。

event_handler.o: src/os/event_handler.h src/os/event.h

しかし、次のようなものが必要です(ターゲットのフルパス):

src/os/event_handler.o: src/os/event_handler.h src/os/event.h

その理由は、次のようなファイルがある場合です。

src/os/event_handler.cpp // contains EventHandler class

次のようなコンパニオン ファイルがあります。

test/src/os/event_handler.cpp // contains EventHandlerTest unit test class

...そのため、.o ファイルは両方とも、自動生成された依存関係リストに event_handler.o として表示されます。g++ にフル パスを強制的に指定する方法はありますか、それともテスト ファイルの名前を次のように変更する必要がありますか。

test/src/os/event_handler_test.cpp

オンラインまたはドキュメントで何も見つけることができませんでした。

4

1 に答える 1

2

解決策は 2 つあります。

  1. -MMD を使用して、オブジェクト ファイルに対応する .d ファイルを生成する 1 つのステップで依存関係をコンパイルおよび作成します。
  2. -MT または -MQ を使用して、前提条件を生成するときにオブジェクトへのパスを指定します。

個人的には、MMD ソリューションの方が好みです。バグのあるヘッダー ファイルでもうまく機能する傾向があるからです。http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.htmlを参照してください。

于 2013-03-10T10:49:02.037 に答える