【问题标题】:make: *** No rule to make target `gcc', needed by `all'. Stopmake: *** 没有规则来制作目标 `gcc',`all' 需要。停止
【发布时间】:2011-12-19 09:05:00
【问题描述】:

我正在通过一个例如 pgm 来创建一个 make 文件。

http://mrbook.org/tutorials/make/

我的文件夹 eg_make_creation 包含以下文件,

desktop:~/eg_make_creation$ ls
factorial.c  functions.h  hello  hello.c  main.c  Makefile

生成文件

all:gcc -c main.c hello.c factorial.c -o hello

错误:

desktop:~/eg_make_creation$ make all
make: *** No rule to make target `gcc', needed by `all'.  Stop.

请帮我理解编译这个程序。

【问题讨论】:

  • 请再次仔细阅读链接的文档,其中关于格式化 Makefile 的内容;空白字符(尤其是换行符和制表符)很重要,不能简单地省略
  • all: 不是命令行...

标签: c makefile


【解决方案1】:

makefile 的语法非常严格:

target:dependencies
        build_rules
# ^ this space here _needs_ to be a tab.

您所写的内容使 all 依赖于 gcc-c、...,它们不是有效的目标。

你需要的是这样的:

all: hello

hello: factorial.c  functions.h hello.c  main.c 
         gcc -o hello factorial.c hello.c  main.c 

(如果要一步编译链接,不要使用-c开关)。

【讨论】:

  • 我总是登陆这个页面,因为我正在尝试使用g++ 编译器构建.c 文件。
【解决方案2】:

Mat 成功了。

在我的特殊情况下,我使用 vi 并默认启用 expandtab!

要查看此问题是否适用于您,请打开 vi 并执行以下操作:

:set list

如果您没有看到 ^I 选项卡应该在哪里,那么您很可能启用了 et。

只禁用它:

:set expandtab!

也许它也可以帮助其他人。

【讨论】:

    【解决方案3】:

    另一个原因是源文件列表中的名称错误。 (nameWrong.o 而不是 nameRight.o) 那是我的问题。

    【讨论】:

      【解决方案4】:

      After all: 一切都是目标,显示依赖关系,之后编写的任何内容都应该呈现该目录,就像在您的代码中一样 gcc(因为文件不存在)同样明智的 -c all:gcc -c main.c hello.c factorial.c -o hello 正确的是 all:main.c hello.c factorial.c -o hello 请阅读更多相关信息GNU MAKE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多