Wie definiere ich relative Pfade in Visual Studio Project?
Lesezeit: 4 Minuten
Ali Ahmed
Ich habe eine Bibliothek und eine Konsolenanwendung, die eine Bibliothek verwendet. Die Bibliothek hat einen Ordner mit Quell- und Header-Dateien.
Mein Projekt befindet sich in einem untergeordneten/inneren Verzeichnis, aber das Bibliotheksverzeichnis, das ich einschließen möchte, befindet sich in einem übergeordneten/oberen Verzeichnis.
Mein Projektverzeichnis:
H:\Gmail_04\gsasl-1.0\lib\libgsaslMain
Enthält Dateien sind hier:
H:\Gmail_04\gsasl-1.0\src
Wie kann ich Pfade relativ zum Projektverzeichnis verwenden, um Ordner einzuschließen, die sich in einem übergeordneten/oberen Verzeichnis befinden?
Ecken
Anstatt relative Pfade zu verwenden, könnten Sie auch die vordefinierten Makros von VS verwenden, um dies zu erreichen.
$(ProjectDir) zeigt auf das Verzeichnis Ihrer .vcproj Datei, $(SolutionDir) ist das Verzeichnis der .sln Datei.
Eine Liste der verfügbaren Makros erhalten Sie beim Öffnen eines Projekts, gehen Sie zu Eigenschaften → Konfigurationseigenschaften → C/C++ → Allgemein
und drücke die drei Punkte:
Klicken Sie im folgenden Dialog auf Makros um die Makros zu sehen, die von Studio vordefiniert sind (siehe MSDN für ihre Bedeutung):
Sie können die Makros verwenden, indem Sie sie eingeben $(MACRO_NAME) (beachten Sie das $ und die runden Klammern).
Beachten Sie, dass dies der Fall ist runde Klammern ( ), nicht geschwungene Klammern { }. Ich versuche seit fünfzehn Minuten fälschlicherweise, Makros mit letzterem zu verwenden.
– Hazer
22. Januar 2016 um 6:27 Uhr
@hauzer: Danke für den Hinweis. Ich habe Ihren Kommentar in meine Antwort aufgenommen.
– eckes
22. Januar 2016 um 6:31 Uhr
Gibt es ein C#-Projektäquivalent?
– Chiramisu
22. Februar 2020 um 0:21 Uhr
@Chiramisu Ich denke, die Variablen sind dort gleich? Siehe stackoverflow.com/a/830307.
– eckes
22. Februar 2020 um 6:09 Uhr
Gibt es eine Codierungsrichtlinie von MS, die empfiehlt, den Pfad zu Visual Studio einzuschließen, anstatt den relativen Pfad einzuschließen?
– Mayur
6. August 2021 um 16:46 Uhr
Wenn ich dich richtig verstehe, brauchst du ..\..\src
Ich habe das versucht … aber es heißt, dass die Include-Datei in diesem Ordner nicht gefunden werden kann. aber wenn ich den vollständigen Pfad gebe, funktioniert es gut.
– Ali Ahmed
1. August 2011 um 7:43 Uhr
Vielleicht ist das Projektverzeichnis nicht das, was Sie denken? Vielleicht ist es eine Stufe tiefer?
– MByD
1. August 2011 um 7:45 Uhr
Wenn dies der Fall ist, was soll ich tun? Was sollte der Pfad sein, wenn Sie mit dem Projektverzeichnis Recht haben?
– Ali Ahmed
1. August 2011 um 7:49 Uhr
..\..\..\src jeder .. geht ein Verzeichnis zurück.
– MByD
1. August 2011 um 7:50 Uhr
Wo stellt man das hin? Welche Flags übergebe ich an die link Befehl für den Linker?
– Aaron Franke
21. April 2021 um 4:10 Uhr
Yvan Vander Sanden
Ich habe eine Syntax wie diese zuvor verwendet:
$(ProjectDir)..\headers
oder
..\headers
Wie andere bereits betont haben, ist das Startverzeichnis dasjenige, in dem sich Ihre Projektdatei befindet (vcproj oder vcxproj), nicht dort, wo sich Ihr Hauptcode befindet.
Es scheint in VS2013 Update 3 wieder gut zu funktionieren, bei U2 und U1 bin ich mir nicht sicher.
– iFreilicht
27. Oktober 2014 um 13:00 Uhr
Sollte ($ProjectDir) nicht $(ProjectDir) sein?
– Anti-eindeutigminzig
25. Januar 2015 um 15:06 Uhr
Gute Antwort. Getestet auf Microsoft Visual Studio Community 2017.
– Joma
21. Mai 2018 um 3:57 Uhr
Klicken Sie auf “Übernehmen” und überprüfen Sie dann in der ‘Linker->Befehlszeile’, ob die generierten absoluten Pfade korrekt sind.
– Anton Andrejew
10. April 2019 um 8:49 Uhr
Funktioniert nicht mit zugeordneten Netzlaufwerken, dann müssen Sie den Pfad anscheinend fest codieren!
– Auswurf
31. Juli 2019 um 9:39 Uhr
Michael Häphrati
Standardmäßig sind alle von Ihnen definierten Pfade relativ. Die Frage ist: relativ zu was? Es gibt mehrere Optionen:
Angeben einer Datei oder eines Pfads ohne etwas davor. Zum Beispiel: “mylib.lib“. In diesem Fall wird die Datei am gesucht Ausgabe Verzeichnis.
Wenn Sie „..\“ hinzufügen, wird der Pfad aus dem tatsächlichen Pfad berechnet, in dem sich die .sln-Datei befindet.
Bitte beachten Sie, dass nach einem Makro wie $(SolutionDir) kein Backslash “\” hinzugefügt werden muss. Benutz einfach $(SolutionDir)mylibdir\mylib.lib. Falls Sie es einfach nicht zum Laufen bringen können, öffnen Sie die Projektdatei extern von Notepad und überprüfen Sie sie.
Es gibt ein paar Tipps, die Sie wissen müssen.
Bedenken Sie, dass Ihre App unter c:\MyRepository\MyApp ausgeführt wird
Ein einzelner Punkt auf Ihrem Pfad bedeutet den Ordner, in dem Ihre App ausgeführt wird. Wenn Sie also auf einen Ordner oder eine Datei im MyApp-Ordner zugreifen möchten (stellen Sie sich c:\MyRepository\MyApp\Resources\someText.txt vor), können Sie dies so tun var bla = File.Exists(./Resources/someText.txt)
und Sie können mit doppelten Punkten (..) eine Ebene nach oben gehen. Denken Sie an einen Ordner unter c:\MyRepository\SomeFolder\sometext.txt für MyApp, es wird so aussehen var bla = File.Exists(../SomeFolder/someText.txt)
und es ist möglich, 2,3,4.. Ebenen nach oben zu gehen
../../SomeFolder (2 Ebenen höher)
../../../SomeFolder (3 Ebenen höher)
und Pfad, der ohne Punkte beginnt, bedeutet den Laufwerksstamm. var bla = File.Exists(/SomeFolder/someText.txt) sucht in unserem Szenario nach c:\SomeFolder\someText.txt.
14164400cookie-checkWie definiere ich relative Pfade in Visual Studio Project?yes