Zugriff auf Visual Studio-Makros aus dem Quellcode?

8

Visual Studio hat Makros wie $(TargetDirectory) , $(OutputPath) usw. In meinem Quellcode möchte ich einen relativen Pfad für das Laden einer Datei aus einem Ordner einige Ebenen unter dem TargetDirectory angeben.
Momentan mache ich das: mLayer = mEngine->AddLayer("D:\Projects\abc.osg"); und ich möchte, dass es so etwas wie mLayer = mEngine->AddLayer(($TargetDirectory)+"..\..\abc.osg");

ist

Es ist nur eine vorübergehende Anforderung, damit ich meinen Code einer Person für eine kleine Demo geben kann, und sein TargetDirectory ist anders auf meine Verzeichnisse ausgerichtet. Gibt es eine Möglichkeit, die Visual Studio-Makros im Quellcode zu verwenden? (Ich weiß zumindest, dass auf Systemumgebungsvariablen zugegriffen werden kann)

    
Nav 15.02.2013, 04:47
quelle

5 Antworten

7

Gehe zu Projekteigenschaften - & gt; Konfigurationseigenschaften - & gt; C / C ++ - & gt; Präprozessor - & gt; Präprozessordefinitionen und fügen Sie Folgendes hinzu:

%Vor%

Dies definiert ein breites Zeichenfolgenliteral namens TARGET_DIRECTORY, das den Inhalt des Makros $ (TargetDir) enthält. Wichtig ist, dass dadurch eine C ++ - Raw-Zeichenfolge erstellt wird, die Backslashes nicht als Escape-Zeichen behandelt. Pfade enthalten umgekehrte Schrägstriche. Die Verwendung eines regulären String-Literals wäre falsch und würde in einigen Fällen sogar zu Compiler-Fehlern führen.

Wichtig!

Wenn Sie ein Makro verwenden, das eine schließende Klammer gefolgt von doppelten Anführungszeichen enthalten kann) "müssen Sie ein zusätzliches Trennzeichen verwenden, das nicht im Makrowert vorkommen kann, zum Beispiel:

%Vor%

Im Fall von Windows-Dateisystempfaden ist dies nicht notwendig, da Pfade keine doppelten Anführungszeichen enthalten können.

    
Tom 08.10.2014, 23:46
quelle
7

Sie können dies nicht automatisch tun, aber Sie können bestimmte Eigenschaften von MSBuild an den Präprozessor übergeben:

%Vor%

Dies kann in der IDE konfiguriert werden, indem Sie zum Dialogfeld Projekteigenschaftsseiten gehen und zu Konfigurationseigenschaften navigieren - & gt; C / C ++ - & gt; Präprozessor-Definitionen und Hinzufügen von

%Vor%

Beachten Sie, dass Ihre Verwendung von + für die String-Literalkettung falsch ist: String-Literale (und C-Strings im Allgemeinen) können nicht mit + verkettet werden. String-Literale können vielmehr aneinandergereiht werden, indem sie nebeneinander platziert werden. Zum Beispiel

%Vor%     
James McNellis 15.02.2013 05:00
quelle
-1

Ich würde vorschlagen, sie relativ zum Arbeitsverzeichnis der Anwendung zu machen oder so. Schauen Sie sich vielleicht die GetCurrentDirectory-Funktion an, Ссылка .

    
Ryan 15.02.2013 04:52
quelle
-1

Nicht, dass ich davon weiß, aber ich habe eine Alternative.

Stellen Sie Ihre Datei als Post-Build-Schritt bereit. In diesem Schritt können Sie das Makro $ (OutDir) konsumieren, das den Ablageordner für Binärdateien darstellt. Dies sollte Ihnen helfen, diese Datei an einer relativen Position von Ihrer App zu platzieren und diese relative Position innerhalb Ihres Codes zu verwenden.

Dies wird auch eine dauerhafte Lösung sein, anstatt etwas vorübergehend zu tun.

    
allen 15.02.2013 04:56
quelle
-1

verwenden Sie TARGET_DIRECTORY="" $ (TargetDir) "" anstelle von TARGET_DIRECTORY="$ (TargetDir)" für Zeichenfolge-Makro. (Beachten Sie doppelte Anführungszeichen)

Arbeitete für mich in VS2005.

    
Thinkeye 02.08.2013 13:38
quelle