我想讀的 「的Makefile」 在C/C++C/C++ - 查找的Makefile文件路徑可編程
它的工作原理是這樣做的:system("make -C /Users/MyNAME/Desktop/Folder flash");
「使Flash」 是命令來運行該文件和/Users/MyNAME/Desktop/Folder是
文件路徑。此代碼有效,但我如何使本地文件路徑,從相同的
讀取debug文件夾(程序所在的位置),而無需手動寫入文件?
我想讀的 「的Makefile」 在C/C++C/C++ - 查找的Makefile文件路徑可編程
它的工作原理是這樣做的:system("make -C /Users/MyNAME/Desktop/Folder flash");
「使Flash」 是命令來運行該文件和/Users/MyNAME/Desktop/Folder是
文件路徑。此代碼有效,但我如何使本地文件路徑,從相同的
讀取debug文件夾(程序所在的位置),而無需手動寫入文件?
您可能想要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
線運行。
這是比我的更好的解決方案,除非有人看到原因,否則我會在5分鐘內刪除我的。 – 2011-12-20 15:57:35
我的代碼也可以運行,但是我怎樣才能從當前目錄運行我的程序正在運行的地方 – user1104856 2011-12-20 16:02:32
請解釋一下爲什麼要'make'一次運行在兩個目錄中:程序所在的目錄和'/ Users/MYNAME /桌面/ Folder'。 – 2011-12-20 16:04:01
恩,在那裏留下路?
make flash
將做make和make將看當前的工作目錄。
它說:make:***沒有規則做目標'閃光燈'。停止。 – user1104856 2011-12-20 15:53:32
你可以使用getcwd()
來獲取當前工作目錄:
char cmd[1040];
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) != NULL)
{
snprintf(cmd, sizeof(cmd), "make -C \"%s\" flash", cwd);
system(cmd);
}
它說make:***沒有規則使target成爲'flash'。停止。 – user1104856 2011-12-20 16:10:36
我想在最後得到當前可執行文件的路徑而不包含可執行文件名。 – user1104856 2011-12-20 16:56:22
你是什麼意思是*閱讀文件* - 你似乎是運行它。 – 2011-12-20 15:50:55
對不起,我想指向相同的文件夾中的生成文件,而不寫這個長的手動文件路徑 – user1104856 2011-12-20 15:52:43
你問,「我怎麼能從當前目錄運行make,我的程序正在運行?」不會那就是,省略'-C/path/here'位? – BRFennPocock 2011-12-20 15:53:29