2011-01-13 3 views
0

私は私のメインプログラムと私のテストの両方でインポートされた静的ライブラリを持っていました。しかし、静的ライブラリの内部にグローバル変数を構築する必要がありました.Visual Studioに強制する方法はありません。Visual Studio 2010のビルドシステムでリンクシームを設定する簡単な方法はありますか?

私がしたいのは、すべての一般的なC++ファイル、ユニットテスト(一般的なC++ファイル)をコンパイルしてリンクするプロジェクト、および実際のアプリケーションをリンクするプロジェクトをコンパイルするプロジェクトです。

Visual Studio 2010でこれを行うにはどうすればよいですか?

EDIT:明確化が求められているので、ここで私が何を意味するかです:

InterfaceIUse.hpp

#include <memory> 

struct IInterface 
{ 
    virtual ~IInterface() {} 
    virtual void SomethingIDependOn() = 0; 
}; 

std::auto_ptr<IInterface> FactoryMethod(); 

CodeUnderTest.cpp

#include "InterfaceIUse.hpp" 

void FunctionUnderTest() 
{ 
    //Blah blah blah 
} 

IExistOnlyInTheMainProgram.cpp

#include "InterfaceIUse.hpp" 

std::auto_ptr<IInterface> FactoryMethod() 
{ 
    //I return the real implementation of the interface. 
} 

IExistOnlyInTheTest.cpp

#include "InterfaceIUse.hpp" 

std::auto_ptr<IInterface> FactoryMethod() 
{ 
    //I return the mock implementation of the interface. 
} 

アイデアは、コードの依存関係を依存関係を注入するためにテストされることを可能にする所定の工場、の右の.cpp実装をコンパイルすることです。

メイクファイルでこの種のリンクシームを行うのは簡単ですが、makefileにヘッダー依存関係を手動で維持する必要があるため、makefileは望ましくありません。

+0

ファイル→新規プロジェクト...右クリック→既存のアイテムを追加。 –

+0

makefileプロジェクトを作成し、ビルド、リンクなどのコマンドを提供してみましたか?あなたはそれで狂ったことをすることができます。 –

+0

質問が表示されているかわかりません。複数のプロジェクトで同じソースコードファイルを参照することは、それらを同期させておくという面倒を超える問題ではありません。.objファイルが互いにぶつかり合っている場合は、 "Object File Name"設定を変更する必要があります。私は初期化の問題に焦点を当てるだろう、あなたは持ってはいけない。少し静的なC++クラスのインスタンス変数は不思議を行うことができます。 –

答えて

1

VS2008で同様のセットアップを行っていますが、これはVS2010でもまだ当てはまります。

は、私がセットアップ としての私のプロジェクト階層がProductionCodeBaseTestCodeBaseを構築し、起動します。 共通のインターフェイス/ヘッダーは、すべてのプロジェクトからアクセス可能なフォルダに展開されます。

はその後、私の「構築」プロジェクトでは、私は手動での設定、およびオブジェクトファイル(複数可)TestCodeBaseから「デバッグ」設定に「リリース」にProductionCodeBaseからオブジェクトファイル(複数可)を追加します。

"Build"にリンクするときにオブジェクトファイルが有効になるようにプロジェクトの依存関係を設定することを忘れないでください。

ソースファイルをリンクしないでオブジェクトファイルにコンパイルするだけのプロジェクトを作成できることに注意してください。特定のプロジェクトの "Tool Build Order"に行き、対応するリンカを無効にしてください。

+0

+1 - この「ツールビルドオーダー」はどこですか? –

+0

VS2010で削除された '.rules'ファイルシステムの一部のようです。 –

+0

私はリンクを避けるために静的ライブラリにコードを入れてから、オブジェクトファイルを他のプロジェクトに手動で追加します。 –

関連する問題