Visual Studio 2010, mehrere Win32 Applikationen und eine Header-Datei
-
Hallo Forum,
ich habe Visual Studio 2010 Express Edition und drei kleine einfache Win32 Applikationen. Für jede dieser kleinen Applikationen habe ich mit Visual Studio ein Projekt angelegt - funktioniert wunderbar, keine Probleme.
Nun ist es so, dass diese Applikationen eine gemeinsame Header-Datei haben und ich habe diese Header-Datei nun drei mal auf der Festplatte, in jedem Projektverzeichnis... Wenn ich jetzt also in der Header-Datei irgendwas modifiziere, muss ich dann zusehen, sie in jedem Projektverzeichnis anzupassen, dann muss ich jedes Projekt einzeln öffnen und bauen...
Ich habe grad folgendes ausprobiert: In der Projektmappe von Visual Studio drei Projekte hinzugefügt und ein einzelnes Verzeichnis ./include mit der einen Header-Datei, die drei Projekte inkludieren diese eine Datei, sieht auf der Festplatte so aus:Sysmets> find ./include ./include/sysmets.h ./ipch ./ipch/sysmets3-64f5343f ./ipch/sysmets3-64f5343f/sysmets3-30cb7997.ipch ./Sysmets.opensdf ./Sysmets.sdf ./Sysmets.sln ./Sysmets.suo ./Sysmets.vcxproj ./Sysmets.vcxproj.filters ./Sysmets.vcxproj.user ./Sysmets1 ./Sysmets1/Sysmets1.cpp ./Sysmets1/Sysmets1.vcxproj ./Sysmets1/Sysmets1.vcxproj.filters ./Sysmets1/Sysmets1.vcxproj.user ./Sysmets2 ./Sysmets2/Sysmets2.cpp ./Sysmets2/Sysmets2.vcxproj ./Sysmets2/Sysmets2.vcxproj.filters ./Sysmets2/Sysmets2.vcxproj.user ./Sysmets3 ./Sysmets3/Sysmets3.cpp ./Sysmets3/Sysmets3.vcxproj ./Sysmets3/Sysmets3.vcxproj.filters ./Sysmets3/Sysmets3.vcxproj.user
Sysmets1, Sysmets2 und Sysmets3 sind die einzelnen "Unterprojekte". Im Prinzip funktioniert es, ich klicke auf "Projektmappe neu erstellen" und alle drei werden gebaut.
Wäre die Aufteilung auf diese Weise "gängige Praxis"? Das include-Verzeichnis steht irgendwie ausserhalb, man muss in jedem Unterprojekt Include-Pfad anpassen... Wie würdet ihr so was machen (mit Visual Studio 2010)?
-
Ich arbeite genauso/ähnlich. Du musst halt darauf achten, dass diese "Common" Dateien auch im Projekt included sind.
Für die Anpassung der Inlcuee Folder und Linker Optionen benutze ich je Solution eine oder mehere Property-Dateien die ich mit dem dem Property-Manager erzeuge. Ich mache die Einstellung nur einmal und fürge die Property-Datei einfach in das Projekt ein.
Meine Struktur sieht so aus.
+- Dev (Root Folder für alle Solutions) +- Common (globaler Folder für Common includes) +- Libs (libs die in allen Solutions verwendet werden. +- Include +- Bin +- Lib1 (Projkete der Libs) +- Lib2 +- Solution 1 +- Common (Common files für Solution 1) +- Proj 1-1 +- Proj 1-2 +- Proj 1-3 +- ... +- Solution 2 +- Common (Common files für Solution 2) +- Proj 2-1 +- Proj 2-2 +- Proj 2-3 +- ...
-
Danke schön für den Tipp!
Ich habe grad noch ausprobiert, einem Projekt die drei Quellcode Dateien (Sysmets1.cpp, Sysmets2.cpp und Sysmets3.cpp) hinzuzufügen, der Linker beschwert sich dann natürlich, dass es mehrfache WinMain Symbole gibt:
1>------ Neues Erstellen gestartet: Projekt: Sysmets_tmp, Konfiguration: Debug Win32 ------
1> Sysmets3.cpp
1> Sysmets2.cpp
1> Sysmets1.cpp
1> Code wird generiert...
1>Sysmets2.obj : error LNK2005: WinMain@16 ist bereits in Sysmets1.obj definiert.
1>Sysmets2.obj : error LNK2005: "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND_@@IIJ@Z) ist bereits in Sysmets1.obj definiert.
1>Sysmets2.obj : error LNK2005: "struct <unnamed-type-sysmetrics> * sysmetrics" (?sysmetrics@@3PAU<unnamed-type-sysmetrics>@@A) ist bereits in Sysmets1.obj definiert.
1>Sysmets3.obj : error LNK2005: WinMain@16 ist bereits in Sysmets1.obj definiert.
1>Sysmets3.obj : error LNK2005: "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND_@@IIJ@Z) ist bereits in Sysmets1.obj definiert.
1>Sysmets3.obj : error LNK2005: "struct <unnamed-type-sysmetrics> * sysmetrics" (?sysmetrics@@3PAU<unnamed-type-sysmetrics>@@A) ist bereits in Sysmets1.obj definiert.
1>C:\Dokumente und Einstellungen\abc.w\Desktop\Petzold\Sysmets_tmp\Debug\Sysmets_tmp.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========Gibt es vielleicht eine Möglichkeit, in einem Projekt aus Sysmets1.cpp -> Sysmets1.exe, aus Sysmets2.cpp -> Sysmets2.exe und aus Sysmets3.cpp -> Sysmets3.exe zu bauen?
Oder ist es so festgelegt, dass ein Projekt nur eine exe erstellen kann?
-
Haben heute alle einen Brückentag genommen oder was
Na gut, egal, wenn's nicht geht, dann ist es wohl so
-
Aus einem Projekt wird normalerweise ein fertiges Programm (oder auch eine Library) - also darfst du auch nur eine main() im Projekt haben. Aber du kannst mehrere Projekte in eine Solution/Projektmappe zusammenfassen.
-
Je nachdem, ob du die Express Edition oder was anderes benutzt kannst du auch Header in "Projektmappenordner" bzw. "Solution-Folder" packen.
Bei mir sieht das aktuell so aus:
http://www.derpumu.de/jpg/SolutionExplorer.jpgDer Header "cardfw.h" liegt außerhalb der Projekte, weil er nicht wirklich irgendwo dazugehört. Andersrum hab ich unten das Projekt "util", wo ich alle möglichen Dinge sammle, die von anderen Projekten genutzt werden, z.B. ein Header für typesafe enums, ein Makro, mit dem ich während der Implementierung Platzhalter-Code einbauen kann, der eine "UnimplementedFeatureException" wirft und ähnliches allgemeines Zeugs..
-