[Visual Studio '13 + Git] Projekte und deren Abhängigkeiten sauber erstellen?

Skid

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine Frage, die die Projektarbeit und Co-Arbeit von mehreren Teammitgliedern betrifft, die gleichzeitig an zwei oder mehreren Projekten arbeiten. Der Aufbau des Projekts ist wie folgt:

- Ein Hauptprojekt, welches die Hauptanwendung (EXE) darstellt, welches eine Abhängigkeit zu zwei anderen Unter-Projekten hat
- Die beiden Unterprojekte laufen unabhängig voneinander und werden als DLL/LIB generiert auf die die Hauptanwendung zugreift
- Zwei weitere Testprojekte (EXE), die auf die beiden Unterprojekte zugreifen und eine Testumgebung darstellen

Meine Frage ist, wie ich hier die Abhängigkeiten richtig generiere in Visual Studio. Schön wäre es, wenn die beiden Unterprojekte zu erst generiert werden und anschließend das Hauptprojekt (das funktioniert soweit über die Verweise, wenn das Hauptprojekte als Startprojekt festgelegt wurde). Ich habe hier jedoch das Problem, dass ich die beiden Unterprojekte nicht auf ein separates Git-Repo laden kann und bei einem Commit somit alle drei Projekte gleichzeitig commiten muss, wenn ich Änderungen vorgenommen habe.
Schön wäre es, wenn man die Projekte generell voneinander so trennen könnte, dass man eben drei Repos hat, aber bei dem Hauptprojekt alle Projekte in der Projektmappe enthalten sind.

Was mich auch etwas wundert ist die Sache mit den LIBs und DLLs. Bisher muss ich in meinem Hauptprojekt die LIB mittels "#pragma comment" hinzufügen und anschließend noch die Headerfile. Außerdem muss ich dann noch den Pfad zu der LIB und zu den Header-Dateien angeben, was mich irgendwie nervt, da nicht jeder Pfad auf einem Rechner der Gleiche ist. Schön wäre es, wenn alle LIBs in dem Debug-Ordner der Hauptanwendung generiert werden und separat nochmal in dem jeweiligen Debug-Ordner für die Testanwendungen. Gibt es da eine Möglichkeit oder gar hilfreiche Lektüre? Auf der Website von Microsoft wurde ich bisher noch nicht wirklich fündig, beziehungsweise war die bisher weniger hilfreich ...

Beste Grüße und Danke,
SKiD.
 
Hallo Skid

Was Libraries und Header anbelangt mache ich das in der Regel so: Ich habe im Solution-Root ein Verzeichnis dep mit include und lib (subfolder Debug und Release). Die entsprechenden Pfade in der Solution sind dann $(SolutionDir)\dep\include und $(SolutionDir)\dep\lib\$(Configuration). So ist das dann unabhängig vom absoluten Pfad.

Viele Grüsse
Cromon
 
Wenn du .libs und .dlls nach dem Erstellen rumkopieren willst, dafür gibt es die Build Events (oder zerdeutscht Build-Ereignisse).
Ich kopiere in dem Fall im Post-Build-Event die erstellten Dateien in das Verzeichnis für das Hauptprojekt. Bei den Scripts idealerweise die Makros oder relative Verzeichnisse einsetzen, dann ist es auch wesentlich transportabler.
 
Hallo Skid,

ich würde dir für diesen Fall die Verwendung eines Makefile-Generators wie z.B. CMake empfehlen. Bei CMake definiert man die einzelnen Projekte und deren Abhängigkeiten in einer Skriptsprache. CMake erstellt daraus dann eine Visual Studio Solution. Am Ende werden nur die Steuerdateien von CMake in das Repo eingecheckt und nicht die Visual-Studio-Projekte.

Ich habe hier jedoch das Problem, dass ich die beiden Unterprojekte nicht auf ein separates Git-Repo laden kann und bei einem Commit somit alle drei Projekte gleichzeitig commiten muss, wenn ich Änderungen vorgenommen habe.
Das verstehe ich nicht. Wieso musst du alle drei Projekte gleichzeitig committen? Mit Git kann man doch über die Staging Area sehr feingranular bestimmen, was in einen Commit soll und was nicht.

Grüße
Matthias
 
ich würde dir für diesen Fall die Verwendung eines Makefile-Generators wie z.B. CMake empfehlen. Bei CMake definiert man die einzelnen Projekte und deren Abhängigkeiten in einer Skriptsprache. CMake erstellt daraus dann eine Visual Studio Solution. Am Ende werden nur die Steuerdateien von CMake in das Repo eingecheckt und nicht die Visual-Studio-Projekte.
+1 für CMake [einchecken von Projektdateien mag ich gar nicht]

Alternativ zu CMake gibt es auch gyp
Das verstehe ich nicht. Wieso musst du alle drei Projekte gleichzeitig committen? Mit Git kann man doch über die Staging Area sehr feingranular bestimmen, was in einen Commit soll und was nicht.
Außerdem könnte man Submodule bei git verwenden um verschiedene Repositories miteinander abzustimmen.
 
Zurück