2012-10-11 96 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文件數量擺弄。