运行 QtCreator 中的 exe 与 QtCreator 外部的工作目录不同

Running exe in QtCreator has different working directory than outside QtCreator

当我在 QtCreator 中编译和 运行 一个应用程序时,当前工作目录是构建目录,即在我的例子中名为 "build-MyProject-Desktop_Qt_5_4_0_MSVC2013_32bit" 的文件夹,但这不是 exe 目录exe在debug或release子目录下,也就是我运行QtCreator之外的exe时的"current working directory"。如何让 QtCreator 也将此路径用作当前工作目录?我已经尝试在我的 运行 设置中更改 "Projects" 下的目录,但看起来我不能为调试和发布版本使用不同的目录。

编辑:在我看来,称其为副本有点牵强,因为 "duplicate" 指的是创建数据库,而我的指的是 QtCreator 的奇怪行为。我实际上问的问题是如何更改 QtCreator 的属性,因为从父文件夹调用我的 exe 很奇怪。 Visual Studio 从来没有这样对我。课程(除非明确设置,否则不要使用当前工作目录)可能是相同的,但问题完全不同,所以我无法通过搜索 Whosebug 而不是询问来找到解决问题的方法。

如果您希望您的程序始终使用可执行文件的位置作为其工作目录,那么您可以从应用程序代码内部执行此操作

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

如果您需要查找与可执行文件相关的文件,依赖当前工作目录并不是一个好主意,它是由调用程序的位置决定的,而不是可执行文件所在的位置。

要查找可执行文件的位置,请使用 QCoreApplication::applicationDirPath。请注意,就 cross-platform 可移植性而言,这仍然有点不稳定,例如Unix 或 MacOS 倾向于将与您的程序相关的文件放在与 Windows PC 按照惯例完全不同的位置。

如果我这样调用你的程序:

some/subdir/yourprogram

当前工作目录将不是 some/subdir,您的逻辑将失败。

作为 Kevin Krammer 提出的相反解决方法,您可以在 Qt Creator 之外更改工作目录:

正在接受此配置: C:\buildDir\debug C:\buildDir\release

C:\buildDir\launch.bat 中创建一个批处理(例如)以启动您的可执行文件:release\yourexe.exe

迟早可以使用此批处理来指定一些有用的环境变量或日志重定向。

(PS : 我想你的编译器处于 Windows 之下,但这在 linux)

上的工作方式类似