2010-11-23 10 views
3

Eine Quelle mit mehreren Objekten Ich benutze MSVS 2010 und ich habe eine C++ Quelldatei, die in 2 Objekt-Dateien kompilieren muss. Der Unterschied zwischen diesen Zusammenstellungen ist ein "definierter UNICODE" für einen von ihnen, aber nicht für den anderen. Ich kann (und will) keine Vorlagen für dieses verwenden.Eine Quelle mit mehreren Objekten

Derzeit verwende ich 3 Quelldateien für dieses Projekt in meinem Projekt. Die tatsächliche Quelle ist von Build ausgeschlossen, während die anderen 2 Wrapper um es sind. So:

file = Wrap-UNICODE.cpp

#ifndef UNICODE 
#define UNICODE 
#endif 

#include "actual-source.cpp" 
// eof 

file = Wrap-ANSI.cpp

#ifdef UNICODE 
#undef UNICODE 
#endif 

#include "actual-source.cpp" 
// eof 

Wenn Makefiles mit i die Verwendung von Wrapper soucrces leicht vermeiden können, indem unterschiedlicher Ausgang Schalter. Meine Frage ist, ich würde gerne wissen, ob (und wie) ich das direkt in einem MSVS-Projekt machen kann.

+1

Wie soll das funktionieren? Klingt so, als würden Sie auf jeder Plattform mit Linkerproblemen enden, wenn Sie nicht andere Namen für UNICODE oder! UNICODE definiert haben. Was befindet sich in der Datei actual-source.cpp? Können wir einen Hinweis bekommen? –

+0

Bitte markieren Sie Ihre Frage als 'Visual-Studio' –

+0

Es funktioniert, wegen zwei Sätze von Deklarationen. –

Antwort

1

Wenn ich richtig verstehe, was Sie tun möchten, ist dies möglich. Ich habe MS Visual Studio 2005 Standard Edition; Hier ist, wie ich das tun kann (Sie müssen dies möglicherweise anpassen, wenn Sie eine andere Version haben, oder möglicherweise funktioniert es sogar nicht in Ihrer Version; ich hoffe, dass Ihr Computer nicht explodiert :)).

Der erste Schritt erfordert eine manuelle Bearbeitung der Projektdatei. Öffnen Sie die Projektdatei (es heißt stuff.vcproj auf meinem Rechner) und replizieren die Zeilen, die die Dateien erwähnen:

<File 
    RelativePath=".\actual-source.cpp" 
    > 
</File> 
<File 
    RelativePath=".\actual-source.cpp" 
    > 
</File> 

Dann laden Sie das Projekt in MSVS. Gehe in den Projektmappen-Explorer (Strg + Alt + L auf meiner Maschine); Das Projekt wird zwei Dateien mit identischem Namen anzeigen. Öffnen Sie die Eigenschaftsseiten von jedem (Alt + F7 auf meinem Computer) und fügen Sie die gewünschten Unterschiede hinzu (z. B. Präprozessordefinitionen). Wählen Sie Ausgabedateien, Objekt Dateinamen im selben Fenster (Property Pages) und fügt verschiedene Namen (z actual-source-unicode; MSVS fügt die .obj Erweiterung beim Kompilieren):

Sie müssen auch verschiedene Namen für Objektdateien eingestellt. Wenn Sie das nicht tun, haben die beiden obj-Dateien denselben Namen, und der eine überschreibt den anderen.

+0

Klingt wie das Richtige! Sollte einfacher gemacht werden, aber wenn es funktioniert, funktioniert es. Zumindest hast du meine Frage vollständig verstanden. Danke vielmals !! –

+0

@ Edwin: Sie schreiben einen Kommentar dazu in der Quelldatei. Eigenschaften pro Datei sind für Wartungscodierer verwirrend, weil MSVC ihre Existenz nicht in der IDE anzeigt (AFAICT). Jemand könnte auf den doppelten Dateieintrag stoßen und entscheiden, das (wahrgenommene) Duplikat zu löschen. – DevSolar

+0

@DevSolar: Sie haben Recht, dass dies verwirrend sein kann. Aber die Quelle ist gut dokumentiert (für mich) und es ist ein persönliches Projekt. Und jemand, der denkt, dass er schlau ist und beschließt, etwas zu löschen, ohne andere zu konsultieren, sollte auf Sicht erschossen werden (Scherz). –

0

AFAIK Sie können mehrere Builds in Ihrer Lösung erstellen. Gehen Sie einfach in den Konfigurationsmanager der Lösung (sollte über das Kontextmenü der Lösung zugänglich sein).

Auf diese Weise können Sie auch vermeiden, zwei Versionen Ihrer Datei zu haben. Es reicht aus, die Definitionsoptionen in den beiden Konfigurationen unterschiedlich festzulegen.

+0

Das ist nicht genau das, was ich machen möchte. Ich muss das gleiche Ding in 1 Anwendung einmal in der UNICODE-Weise und einmal in der ANSI-Weise tun, und dann Unterschiede vergleichen. –

0

Visual Studio definiert _UNICODE für Sie, wenn Sie Unicode-Apps erstellen möchten.

+0

Ich weiß das. Ich benutze das schon! Ich möchte UNICODE und ANSI gleichzeitig –

0

Warum verwenden Sie nicht einfach verschiedene Konfigurationen für Ihre beiden Builds (wie Luca Martini erwähnt) und verwenden dann Batch Build? Sie können dann die kompilierten Ausgaben beliebig vergleichen.

+0

ich möchte nicht die Ausgabe der Compilations zu vergleichen. –

+0

Es ist kein programmatisches Problem. Ich möchte nur die Wrapper-Quellen loswerden, ohne zwei Buids zu verwenden, weil das nicht notwendig ist. Mit einer make-Datei erstelle ich 2 Objekt-Dateien aus 1 Quellcode mit 2 Build-Klauseln, wobei ich nur die Ausgabedatei und eine Definition eines Symbols ändere. –

Verwandte Themen