2011-12-20 91 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