2011-01-13 7 views
0

Ich hatte eine statische Bibliothek, die sowohl von meinem Hauptprogramm als auch von meinen Tests importiert wurde. Ich benötigte jedoch globale Variablen innerhalb meiner statischen Bibliothek, und es gibt keine Möglichkeit, Visual Studio dazu zu zwingen, dies zu tun.Gibt es eine einfache Möglichkeit, eine Verbindungsnaht mit dem Buildsystem von Visual Studio 2010 einzurichten?

Was ich dann tun möchte, ist ein Projekt, das alle gängigen C++ - Dateien kompiliert, ein Projekt, das die Komponententests kompiliert und verknüpft (mit den üblichen C++ - Dateien) und ein Projekt, das die eigentliche Anwendung verbindet .

Wie kann ich dies in Visual Studio 2010 tun?

EDIT: Da Klärung gebeten worden, hier ist was ich meine:

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. 
} 

Die Idee ist, die richtige CPP-Implementierung der gegebenen Fabrik zu kompilieren, die die Abhängigkeiten des Codes ermöglicht getestet werden Abhängigkeit injiziert werden.

Diese Art der Verbindungsnaht ist einfach mit Makefiles - aber Makefiles sind unerwünscht, weil ich gezwungen bin, Header-Abhängigkeiten im Makefile manuell zu verwalten.

+0

Datei-> neues Projekt ... Rechtsklick-> Vorhandenes Element hinzufügen. –

+0

Haben Sie versucht, ein Makefile-Projekt zu erstellen und Befehle zum Erstellen, Verknüpfen und was auch immer bereitzustellen? Du kannst damit ziemlich verrückte Sachen machen. –

+0

Nicht sicher, ob ich die Frage sehe. Die Referenzierung der gleichen Quellcode-Dateien in mehreren Projekten ist kein großes Problem, abgesehen von der Notwendigkeit, sie synchron zu halten.Möglicherweise müssen Sie die Einstellung "Object File Name" ändern, wenn die OBJ-Dateien gegenseitig stampfen. Ich würde mich auf das Initialisierungsproblem konzentrieren, du solltest keines haben. Eine kleine statische C++ - Klasseninstanzvariable kann Wunder bewirken. –

Antwort

1

Ich habe ähnliche Setup in VS2008 gemacht, die ich glaube noch für Sie in VS2010 anwendbar.

zu starten, ich meine Projekthierarchie Setup als Bauen, ProductionCodeBase und TestCodeBase. Gemeinsame Schnittstelle/Header werden in Ordner extrahiert, auf die von allen Projekten zugegriffen werden kann.

Dann in meinem Projekt "Build", ich manuell Objektdatei (en) aus ProductionCodeBase in "Veröffentlichung" Konfiguration und Objektdatei (en) aus TestCodeBase in "Debug" Konfiguration hinzufügen.

Vergessen Sie nicht, Projektabhängigkeiten festzulegen, damit die Objektdatei beim Verknüpfen in "Build" gültig ist.

Beachten Sie, dass Sie ein Projekt erstellen können, das Quellcode nur in Objektdateien kompiliert, ohne zu versuchen, sie zu verknüpfen. Gehen Sie einfach zu "Tool Build Order" für das jeweilige Projekt und deaktivieren Sie den entsprechenden Linker.

+0

+1 - wo ist diese "Tool Build Order"? –

+0

Sieht so aus, als wäre es Teil des '.rules'-Dateisystems, das in VS2010 entfernt wurde. –

+0

Ich lege den Code einfach in eine statische Bibliothek (um eine Verknüpfung zu vermeiden) und füge dann die Objektdateien den anderen Projekten manuell hinzu. –

Verwandte Themen