【问题标题】:Set CWD to Source Directory, as opposed to Build Directory将 CWD 设置为源目录,而不是构建目录
【发布时间】:2012-10-11 16:09:02
【问题描述】:

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

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

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

另外,我使用 C FILE IO 方法而不是 C++ 的 std::ifstream 的主要原因只是个人喜好,以防万一。

【问题讨论】:

  • 在什么环境下路径是相对于构建目录的?这很异国情调。在大多数情况下,标准行为完全符合您的要求。
  • 这很有趣,实际上:我正在使用 Qt Creator,我的构建设置设置为调试。当我使用std::ifstream 对其进行测试时,我能够使用相对路径打开文件。但是,使用FILE,它将默认将 cwd 设置为构建目录。

标签: c++ linux makefile cross-platform qmake


【解决方案1】:

在您的 .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 文件中反斜杠的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2013-10-18
    • 2021-10-23
    • 2017-04-15
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多