2016-09-14 18 views
2

這個問題很多時候被問及我提到過所有,但我需要一點不同。C++在Linux中獲取源文件目錄

我使用的MacBook - 當我用以下爲獲取當前目錄它給不同的文件功能>克利翁(IDE),用於C++ 我的程序文件位置 /Users/Kandarp/ClionProjects/SimulationParser/main.cpp

(我認爲實際的路徑,其中文件編譯和執行)

string ExePath() { 
char cwd[1024]; 
if (getcwd(cwd, sizeof(cwd)) != NULL) { 
    fprintf(stdout, "Current working dir: %s\n", cwd); 
    return cwd; 
} else { 
    perror("getcwd() error"); 
    return 0; 
}} 

它給了以下的答案: /Users/Kandarp/Library/Caches/CLion2016.2/cmake/generated/SimulationParser-50b8dc0e/50b8dc0e/Debug

但我需要的路徑在我的.cpp文件RESI德。我做錯了什麼? 請幫忙

+3

C++是一種用於真正程序的語言 - 可在全球一百萬臺計算機上運行的程序。爲什麼在客戶計算機上運行的程序需要開發人員計算機上的.cpp文件的路徑? C++ **編譯器**需要該路徑,鏈接器需要目標文件的路徑,之後不再需要這些路徑。 – MSalters

+1

「我需要我的.cpp文件所在的路徑」。做什麼的?如果您構建了Orogram並將可執行文件複製到另一臺機器上,應該發生什麼?你還需要開發計算機上的路徑嗎? –

+0

n.m.你是對的。移動可執行文件後,我不需要開發者機器的路徑。我需要所以我錯誤地誤解了概念。 – kandarp

回答

3

你沒有做錯什麼。

getcwd()爲您提供執行過程的當前目錄。

當您指示您正在使用的任何工具構建C++代碼來運行它時,它只是從該目錄運行該進程。

C++庫中沒有任何內容告訴應用程序其源代碼的位置。

如果你需要你的應用程序知道它的源代碼在哪裏,你需要把它作爲參數傳遞給main(),或者把它放到你的應用程序讀取的某個配置文件中,或者使用類似的方法。

+0

感謝您的回覆。我在C++環境中有點新,你能給我一些可執行的例子嗎? – kandarp

1

你想要做的是使用__FILE__宏,然後使用基本標記化來提取目錄名稱。

您的方法不起作用,因爲在執行期間,當前目錄是二進制文件的目錄,而不是編譯單元的目錄。