2016-07-05 5 views
4

Ich sah ein paar Fragen zu diesem Thema, aber ich fand nicht die einfache und gemeinsame Weg, dies zu tun.get projectDir als String oder Char * in C++

Meine Frage ist: Wie kann ich $(projectDir) oder ein anderes Makro als string oder char* in meinem C++ Code haben?

Dank

+0

z. übergeben Sie es als Makro-Symbol über die Compiler-Option '/ D' (möglicherweise können Sie einfach die Makrodefinitionen in den Projekteinstellungen verwenden). Im C++ Code kannst du es dann einfach verwenden. –

Antwort

3

Wenn Ihr Compiler raw strings unterstützt, dann können Sie MYMACRO=R"($(ProjectDir))"; zu Präprozessordefinitionen (Screenshot von Visual Studio 2013) hinzufügen: enter image description here

Dann können Sie die folgenden Code hinzu:

#pragma message("MYMACRO == " MYMACRO) // will print project dir during compilation 


std::cout << MYMACRO << std::endl; //will print project dir at run time 
+1

Das sieht für mich wie VS 2010 aus, von dem ich dachte, dass es keine rohen Strings unterstützt. Täusche ich mich, oder fälschst du uns mit dem Screenshot? –

+1

Version von VS wird in der Frage nicht erwähnt, deshalb schrieb ich ** "Wenn dein Compiler rohe Zeichenfolgen unterstützt" ** Und nein, ich täusche niemanden hier vor. Ich werde jetzt einen Kommentar zu der Antwort hinzufügen. Und BTW Screenshot wird in VS2010 praktisch identisch sein, nur String wird nicht funktionieren wegen Backslashs im Pfad – mvidelgauz

+1

Ich verstehe das. Wie hast du VS 2013 so aussehen lassen wie VS 2010? Wie haben Sie das schreckliche benutzerdefinierte Design deaktiviert, mit dem moderne Versionen von Visual Studio ausgeliefert werden? –

2

Das & (ProjectDir) string kann nicht direkt an das Programm übergeben. Stattdessen können Sie das Verzeichnis, wo die ausführbare Datei mit GetCurrentDirectory ins Leben gerufen wurde(), gut in Microsoft-Website erklärt:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364934(v=vs.85).aspx

Sie erhalten einen * char string erhalten. Dann können Sie sich mit einfachen Zeichenfolgenoperationen durch die Verzeichnisse bewegen.

2

MyMacro = R "($ (ProjectDir))"; Perfekt funktioniert für mich.

Ich brauchte das schon lange und das kam als perfekte Lösung. Meine Testfälle nahmen den Pfad der Eingabedatei relativ zu $ ​​(ProjectDir), während die exe versuchte, den Eingabedateipfad relativ zum bin-Ordner zu finden. Als Ergebnis könnte ich entweder das VS-Projekt oder die EXE-Version haben, aber nicht beide.

Diese Lösung funktionierte perfekt, um beide glücklich zu machen.

Danke @mvidelgauz für die wertvollen Informationen.