2011-12-20 41 views
-2

我想讀的 「的Makefile」 在C/C++C/C++ - 查找的Makefile文件路徑可編程

它的工作原理是這樣做的:system("make -C /Users/MyNAME/Desktop/Folder flash");

使Flash」 是命令來運行該文件和/Users/MyNAME/Desktop/Folder

文件路徑。此代碼有效,但我如何使本地文件路徑,從相同的

讀取debug文件夾(程序所在的位置),而無需手動寫入文件?

+0

你是什麼意思是*閱讀文件* - 你似乎是運行它。 – 2011-12-20 15:50:55

+0

對不起,我想指向相同的文件夾中的生成文件,而不寫這個長的手動文件路徑 – user1104856 2011-12-20 15:52:43

+0

你問,「我怎麼能從當前目錄運行make,我的程序正在運行?」不會那就是,省略'-C/path/here'位? – BRFennPocock 2011-12-20 15:53:29

回答

4

您可能想要int chdir(const char *path);函數。例如:

#include <unistd.h> 

/* ... */ 

chdir("/Users/MyNAME/Desktop/Folder"); 
system("make flash"); 

有很多在<unistd.h>其它有用的功能,它應該是存在的任何基於POSIX的系統上。 Check here爲大名單。

編輯:如果路徑是不恆定的,你可能會想將它作爲一個命令行參數程序:

#include <unistd.h> 
#include <stdio.h> 

/* ... */ 

int main(int argc, char* argv[]) 
{ 
    if(argc < 2) 
    { 
     fprintf(stderr, "Usage: %s <path>\n", argv[0]); 
     return 1; 
    } 

    chdir(argv[1]); 
    system("make flash"); 

    /* ... */ 

    return 0; 
} 

與像./foo /Users/MyNAME/Desktop/Folder線運行。

+0

這是比我的更好的解決方案,除非有人看到原因,否則我會在5分鐘內刪除我的。 – 2011-12-20 15:57:35

+0

我的代碼也可以運行,但是我怎樣才能從當前目錄運行我的程序正在運行的地方 – user1104856 2011-12-20 16:02:32

+0

請解釋一下爲什麼要'make'一次運行在兩個目錄中:程序所在的目錄和'/ Users/MYNAME /桌面/ Folder'。 – 2011-12-20 16:04:01

0

恩,在那裏留下路?

make flash 

將做make和make將看當前的工作目錄。

+0

它說:make:***沒有規則做目標'閃光燈'。停止。 – user1104856 2011-12-20 15:53:32

1

你可以使用getcwd()來獲取當前工作目錄:

char cmd[1040]; 
char cwd[1024]; 
if (getcwd(cwd, sizeof(cwd)) != NULL) 
{ 
    snprintf(cmd, sizeof(cmd), "make -C \"%s\" flash", cwd); 
    system(cmd); 
} 
+0

它說make:***沒有規則使target成爲'flash'。停止。 – user1104856 2011-12-20 16:10:36

+0

我想在最後得到當前可執行文件的路徑而不包含可執行文件名。 – user1104856 2011-12-20 16:56:22