c++ - 将 CWD 设置为源目录,而不是构建目录

标签 c++ linux makefile cross-platform qmake

在 C 中,当使用 stdio.h 中的 FILE 结构时,如果程序员尝试打开文件,则当前工作目录将相对于构建目录。

是否有某种设置(可能是编译器标志)我可以使用它来允许在编译或运行时将 CWD 设置到源目录?最好是从 Windows 到 *nix 的跨平台方法,但如果那不可行,我们就说 *nix。

我目前在 Linux 中工作,使用 GCC/G++,使用没有 Qt 库的 qmake。

此外,我使用 C FILE IO 方法而不是 C++ 的 std::ifstream 的主要原因只是个人偏好,以防有人问起。

最佳答案

在您的 .pro 文件中,您可以将源目录定义为一个宏,然后在您的源代码中 chdir() 到它。

# myproject.pro
DEFINES+=SRCDIR=\\\"$$PWD\\\"

# myapp.cpp
int main(int argc, char** argv) {
    if (chdir(SRCDIR)) {
        perror("chdir to " SRCDIR);
    }
    // ... rest of code
}

让它在 Windows 上运行可能涉及调整 .pro 文件中反斜杠的数量。

关于c++ - 将 CWD 设置为源目录,而不是构建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12843936/

相关文章:

php - 拒绝访问 - PHP move_uploaded_file - Ubuntu LAMP/var/www

c++ - 生成文件 |对头文件中包含的另一个头文件的依赖

Makefile If-Then Else 和循环

c++ - 是否有 ranges::view::transform 的可修改 View 版本?

c++ - 全局函数和不明确的参数 NULL 与 char* 在 vs 2013 和 GCC 之间

c++ - 如何阅读此运算符声明和实现?

c++ - c++ 编译的 makefile 未运行

c# - 通过代理隧道化应用程序的所有连接

linux - 使用 while 循环时的 Bash 退出状态

linux - 我可以在 INSMOD 或 MODPROBE 期间将参数传递给驱动程序吗?