【问题标题】:C/C++ - Find Makefile file path programmablyC/C++ - 以编程方式查找 Makefile 文件路径
【发布时间】:2011-12-20 15:49:06
【问题描述】:

我正在尝试在 C/C++ 中读取“Makefile

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

ma​​ke flash”是运行文件的命令,/Users/MyNAME/Desktop/Folder

文件路径。此代码有效,但我怎样才能使文件路径在本地,从相同的读取

调试文件夹(程序所在的位置)无需手动编写?

【问题讨论】:

  • 你的意思是读取文件 - 你似乎正在运行它。
  • 抱歉打错了,但我想指向同一个文件夹中的makefile,而不需要手动编写这个长文件路径
  • 您是在问,“我如何从当前目录运行 make,我的程序正在运行?”不就是省略-C /path/here 位吗?
  • 您的意思是您根本不想指定文件吗?即你只想做系统(“make”)?还是您不想指定路径?
  • BRPocock,是的,这就是我要问的,但它现在说:make: *** /path/here: No such file or directory。停止。

标签: c++ c shell makefile


【解决方案1】:

您可能需要int chdir(const char *path); 函数。示例:

#include <unistd.h>

/* ... */

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

&lt;unistd.h&gt; 中还有许多其他有用的功能,它们应该存在于任何基于 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 分钟内删除我的。
  • 我的代码也可以,但是如何从我的程序运行的当前目录运行 make
  • 请解释为什么您希望make 同时在两个目录中运行:您的程序所在的目录和/Users/MyNAME/Desktop/Folder
  • 我不想写 /Users/MyNAME/Desktop,因为不是每台电脑都有相同的系统..
  • @user1104856 如果目标位于不同的目录中,则不能。这就是 make 命令接受可选参数的原因。
【解决方案2】:

您可以使用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: *** 没有规则来制作目标“flash”。停止。
  • 我想得到当前可执行文件的文件路径,最后没有可执行文件名。
【解决方案3】:

嗯,把那里的路去掉?

make flash

将执行 make 并且 make 将在当前工作目录中查找。

【讨论】:

  • 它说:make: *** 没有规则来制作目标“flash”。停止。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2019-06-27
相关资源
最近更新 更多