2017-01-24 2 views
1

Wenn ich kompilieren und eine Anwendung in QtCreator ausführen, ist das aktuelle Arbeitsverzeichnis das Build-Verzeichnis, dh der Ordner namens "build-MyProject-Desktop_Qt_5_4_0_MSVC2013_32bit" in meinem Fall, aber dies ist nicht das Verzeichnis, in dem sich die Exe befindet. Die Exe kann im Unterverzeichnis debug oder release gefunden werden, welches das "aktuelle Arbeitsverzeichnis" ist, wenn ich die exe außerhalb von QtCreator ausführe. Wie kann ich QtCreator dazu bringen, diesen Pfad als aktuelles Arbeitsverzeichnis zu verwenden? Ich habe bereits versucht, das Verzeichnis unter "Projekte" in meinen Run-Einstellungen zu ändern, aber es sieht so aus, als könnte ich nicht verschiedene Verzeichnisse für die Debug- und Release-Builds verwenden.Ausführen von exe in QtCreator hat andere Arbeitsverzeichnis als außerhalb QtCreator

edit: Dies ein Duplikat nennen ist meiner Meinung nach ein bisschen weit hergeholt, weil das "Duplikat" sich auf die Erstellung einer Datenbank bezieht, während sich meine auf seltsames Verhalten von QtCreator bezieht. Die Frage, die ich tatsächlich gestellt habe, war, wie man die Eigenschaften von QtCreator ändert, weil es seltsam ist, meine Exe von einem übergeordneten Ordner aus aufzurufen. Visual Studio hat mir das nie angetan. Die Lektion (benutze das aktuelle Arbeitsverzeichnis nicht, wenn du es nicht explizit angegeben hast) könnte gleich sein, aber die Fragen waren völlig anders, also hatte ich keine Möglichkeit, eine Lösung für mein Problem zu finden, indem ich stackoverflow durchsuchst anstatt zu fragen.

+1

Können Sie nicht eine andere Art und Weise dieses Problem umgehen? In einem allgemeinen Sinne haben Sie als Entwickler keine Kontrolle darüber, was der Benutzer, der Ihr Programm aufruft, als aktuelles Arbeitsverzeichnis hat. Es ist ziemlich unflexibel, Dinge über Ihre CWD in Ihrem Code zu vermuten ... – rubenvb

+0

Ich verstehe. Nun, ich möchte auf einige Dateien im Zusammenhang mit meiner exe zugreifen, wenn ich nicht sicher sein kann, dass das immer der CWD ist. Sollte ich mit Kevins Antwort weiter unten gehen? – Alex

+0

siehe meine Antwort für eine robuste Lösung für Ihr Problem. – rubenvb

Antwort

0

Wenn Sie Ihr Programm wollen die Lage der ausführbaren Datei verwenden immer als Arbeitsverzeichnis, dann können Sie nur tun, dass aus dem Inneren des Anwendungscodes

QDir::setCurrent(QCoreApplication::applicationDirPath()); 
+0

Danke, es ist nicht genau das, was ich wollte, aber es funktioniert und ich kann mit einer zusätzlichen Codezeile leben.Wenn niemand einen Weg findet, die Eigenschaften von QtCreator so zu ändern, dass ich mein Problem lösen kann, dann werde ich dies als Antwort markieren. Ich weiß nicht, wer es abgelehnt hat, aber ich habe es jetzt neu geordnet, um es auszugleichen. – Alex

+0

@Alex Sie nähern sich dem Problem in die falsche Richtung: Sie sollten sich zuerst fragen: "Ist meine Annahme, dass das Arbeitsverzeichnis korrekt sein soll?" Die Antwort lautet: Nein. Sie können beim Start nichts davon annehmen. Wenn Sie etwas brauchen, müssen Sie es explizit festlegen. Vielleicht sollten Sie in Ihrer Anwendung keine relativen Pfade verwenden, sondern absolute Pfade verwenden, die 'applicationDirPath()' enthalten. –

+0

@Kuba Ober: Dein Kommentar erklärt nicht, warum ich Kevins Lösung nicht verwenden sollte und setze den CWD einfach auf einen sinnvollen Wert. Ist es für andere Anwendungen möglich, damit zu verschrauben? Oder störe ich möglicherweise eine Anwendung, die meins aus einem anderen Verzeichnis aufruft? Kann sich die CWD zu einem beliebigen Zeitpunkt ändern? – Alex

1

Wenn Sie benötigen, um Dateien in Bezug auf die ausführbare Datei zu finden Es ist keine gute Idee, sich auf das Current Working Directory zu verlassen, das von dem Ort bestimmt wird, an dem das Programm aufgerufen wird, nicht von der ausführbaren Datei.

Um den Speicherort Ihrer ausführbaren Datei zu finden, verwenden Sie QCoreApplication::applicationDirPath. Beachten Sie, dass dies in Bezug auf die plattformübergreifende Portabilität immer noch ein wenig flockig ist, wie z. Unix oder MacOS neigen dazu, Dateien, die mit Ihrem Programm in Verbindung stehen, grundsätzlich an radikal anderen Orten als auf einem Windows-PC zu speichern.

Wenn ich Ihr Programm wie folgt nennen:

some/subdir/yourprogram 

das aktuelle Arbeitsverzeichnis nicht some/subdir sein, und Ihre Logik wird fehlschlagen.

Zugegeben diese Konfiguration:

+0

Ich sehe, das ist gut zu wissen. Dann werde ich Kevins Ansatz benutzen. Danke für die Hilfe! – Alex

+0

Herzlichen Glückwunsch zum Auswählen der gebrochenen Ansatz! – rubenvb

-1

Als oposite Abhilfe Wenden von Kevin Krammer vorgeschlagen, können Sie das Arbeitsverzeichnis außerhalb Qt Creator ändern C: \ builddir \ debug C: \ builddir Release \

Fabrikat eine Charge in C:\buildDir\launch.bat (für Beispiel), die Ihre ausführbare Datei startet: release\yourexe.exe

Dieser Stapel kann früher oder später verwendet werden, um einige nützliche Umgebungsvariablen oder Protokollumleitungen anzugeben.

(PS: Ich nehme an, Sie unter Windows zu Ihrem Compiler, aber das funktioniert in ähnlicher Weise auf Linux)

+0

Danke, dass Sie sich die Zeit genommen haben, zu antworten, aber ich möchte keine Batch-Datei erstellen, nur um relative Pfade für meine Exe zu behandeln. Der Downvote war nicht ich. – Alex