2014-09-22 2 views
7

Ich schreibe eine Cross-Plattform-Anwendung. Eine Version funktioniert unter Win32, zweitens - auf Windows Phone.Wie teilen Sie C++ - Quellcodedateien zwischen Projekten in Visual Studio?

Ich möchte meinen C++ - Kern wiederverwenden - insbesondere, dass es keine Plattformabhängigkeiten gibt, nur STL. Um dies zu tun, möchte ich die gleichen Quelldateien in zwei Projekten verwenden: statische Win32-Bibliothek (.lib) und Windows Phone-Komponente (C++/CLI).

Wie kann ich diese beiden Projekte so konfigurieren, dass sie genau die gleichen Quell- und Headerdateien verwenden?


Ok, nehmen wir ein Beispiel. Lassen Sie uns sagen, dass ich habe Projekt:

MyApp.Library [win32 lib] 
    myClass.cpp 
    myClass.h 

Diese Bibliothek wird kompilierte Datei auf .dll und dann in Win32-Anwendung importiert:

MyApp.Win32App [win32 C#] 

Da win32 mit Windows Phone nicht kompatibel ist auf dem binären Pegel Ich kann diese Lib nicht direkt benutzen. Aber da die Bibliothek nur STL verwendet, kann ich Windows Phone Component erstellen, alle seine Quellen dort hinstellen und bauen.

MyApp.Component [WinPhone component] 
    myClass.cpp 
    myClass.h 

Ich möchte diese beiden Dateien genau die gleichen Dateien wie in der Bibliothek verwendet werden. Wie sollte ich das Projekt organisieren, um diesen Effekt zu erzielen?

+0

Möchten Sie einen Kommentar abgeben? – Spook

+0

Was ist mit der Hauptanwendung (en) und der Bibliothek in einer Lösung, und haben die passenden Build-Konfigurationen für alle? –

+1

Ich bin nicht der Downvoter, aber es ist wirklich schwierig, das Problem hier zu sehen. –

Antwort

4

Sie können Quellcode von einem gemeinsamen Speicherort zu mehreren Projekten hinzufügen. Das mache ich sehr; Ich habe Code in einem gemeinsamen Verzeichnis, das sich auf der gleichen Ebene in der Verzeichnishierarchie befindet wie die meisten meiner Projektdateien. Es geht lediglich darum, .h- und .cpp-Dateien aus dem allgemeinen Verzeichnis zu Ihren verschiedenen Projekten hinzuzufügen.

Ich habe bemerkt, dass VisualStudio ein wenig launisch und schwierig wird, wenn Sie ein Netzlaufwerk für die gemeinsame Quelle verwenden, also mache ich das nicht. Aber solange sich der gesamte Quellcode auf lokalen Festplatten befindet und die IDE weiß, wo sie zu finden ist, gibt es kein Problem, dieselbe Quelldatei in sehr vielen Projekten zu haben.

+0

so haben Sie in gewisser Hinsicht das Problem nicht wirklich lösen können - es sei denn, mehrere Instanzen der gleichen Datei sind Ihre Lösung - kurz in eine eigene Bibliothek zu setzen, gibt es wirklich keine Möglichkeit, sie relativ hinzuzufügen? – serup

+1

@serup Es braucht nicht mehrere Instanzen einer Quelldatei, damit sich verschiedene Projekte in verschiedenen Ordnern auf dieselbe Quelldatei beziehen. Ich habe eine Änderung zu meiner vorherigen Antwort: VisualStudio ist OK mit einem Projekt, das Quellen auf Netzlaufwerken referenziert. Es wird mit Projektdateien auf Netzlaufwerken unzufrieden. Ich entwickle auf mehreren Maschinen im selben lokalen Netzwerk, und viele meiner Projekte enthalten Klassen aus meiner Homespun-Klassenbibliothek auf einem Netzlaufwerk. – Logicrat

+0

ja ich fand eine einfache Lösung, die für mich funktioniert - Sie können meine Antwort sehen – serup

0

Eine Möglichkeit besteht darin, alle .hpp- und .cpp-Dateien in einen separaten Ordner zu speichern - nennen Sie es "Shared".

Fügen Sie dann ein zusätzliches Include-Verzeichnis in Ihrer Lösungskonfigurationseigenschaft hinzu - dieses Verzeichnis muss ein relativer Pfad sein.

Dann NUR die CPP-Dateien relativ von diesem freigegebenen Ordner in Ihrem Projekt

NB hinzuzufügen! Wenn Sie in Ihren CPP-Dateien im Ordner "Shared" die Datei "stdafx.h" enthalten, müssen Sie diese kommentieren.

+1

Viele meiner geteilten '.cpp' Dateien enthalten' "stdafx.h" '. Jede Projektdatei hat ihre eigene lokale Kopie von stdafx. In einigen Fällen muss ich das Projektverzeichnis am Ende der Liste der Verzeichnisse hinzufügen, die eingebunden werden sollen, aber das erlaubt mir, die Funktionalität von vorkompilierten Headern zu behalten. – Logicrat

+0

@Logicrat hatte nur Probleme mit Unittests - musste unittest Projekt setzen, um vorkompilierte Header zu verwenden – serup