2012-10-11 67 views
0

在C中,当使用stdio.hFILE结构时,如果程序员试图打开文件,则当前工作目录将相对于构建目录。将CWD设置为源目录,而不是构建目录

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

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

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

+0

什么样的环境是相对于构建目录的路径?这非常奇特。在大多数情况下,标准行为完全如您所愿。 –

+0

实际上,这很有趣:我使用Qt Creator,并将我的构建设置设置为调试。当我使用'std :: ifstream'测试它时,我可以使用相对路径打开文件。但是,使用'FILE',默认情况下它会将cwd设置为build目录。 – zeboidlund

回答

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文件数量摆弄。