C 生成文件错误:没有生成目标的规则

C 生成文件错误:没有生成目标的规则,c,makefile,C,Makefile,我对编写makefiles还不熟悉,在stackoverflow的同一主题上,我已经讨论了其他几个问题,但我的代码还不能使用 我正在编写makefile,以便在开始时编译单个.C文件 CORE_DIR = ../.. CODE_DIR = $(CORE_DIR)/code CC=gcc all: example.o example.o: $(CODE_DIR)/example.c $(CODE_DIR)/variable.h $(CC) $(CODE_DIR)/exa

我对编写makefiles还不熟悉,在stackoverflow的同一主题上,我已经讨论了其他几个问题,但我的代码还不能使用

我正在编写makefile,以便在开始时编译单个.C文件

 CORE_DIR = ../..
 CODE_DIR = $(CORE_DIR)/code

 CC=gcc

 all: example.o

 example.o: $(CODE_DIR)/example.c $(CODE_DIR)/variable.h
      $(CC) $(CODE_DIR)/example.c -o output  
我正在执行命令make-fstart.mk,并得到错误:没有规则使“start.mk”成为目标

我在这方面哪里做错了

编辑:使用make-d start.mk(调试选项)并更改注释中所述的全部:输出。以下是我无法复制的更多文本。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.c'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.cc'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.C'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.cpp'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.p'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.f'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.F'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.r'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.s'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.S'。 正在使用stem
linux.mk'尝试模式规则。
拒绝不可能的隐式先决条件
linux.mk.mod'。 正在使用stem
linux.mk'尝试模式规则。
正在尝试隐式先决条件
linux.mk.sh'。 正在使用中间文件
linux.mk.sh'查找规则。
避免隐式规则递归。
正在使用stem尝试模式规则
linux.mk.sh'。 正在尝试隐式先决条件
linux.mk.sh,v'。
正在使用stem尝试模式规则
linux.mk.sh'。 正在尝试隐式先决条件
RCS/linux.mk.sh,v'。
正在使用stem尝试模式规则
linux.mk.sh'。 正在尝试隐式先决条件
RCS/linux.mk.sh'。
正在使用stem尝试模式规则
linux.mk.sh'。 正在尝试隐式先决条件
s.linux.mk.sh'。
正在使用stem尝试模式规则
linux.mk.sh'。 正在尝试隐式先决条件
SCCS/s.linux.mk.sh'。
未找到
linux.mk'的隐式规则。 已完成目标文件
linux.mk'的先决条件。
无需重新制作目标
linux.mk'。 make:linux.mk无需执行任何操作。

请尝试以下操作:

CORE_DIR = ../..
CODE_DIR = $(CORE_DIR)/code

CC=gcc

all: example.o
    $(CC) -o output $<

example.o: $(CODE_DIR)/example.c $(CODE_DIR)/variable.h
    $(CC) -c $<
CORE_DIR=../。。
代码\目录=$(核心\目录)/代码
CC=gcc
全部:示例
$(CC)-o输出$<
example.o:$(CODE\u DIR)/example.c$(CODE\u DIR)/variable.h
$(CC)-c$<
如何使用:

  • 将这些行放在名为
    Makefile
    的文件中,并在与此
    Makefile
    相同的目录中调用make as
    make
  • 或者将这些行放入具有您喜欢的名称的文件中,例如
    start.mk
    ,但在与此
    start.mk
    相同的目录中调用make as
    make-f start.mk
  • 注意:makefile中的每个规则都由一个制表符缩进,而不是一些空格。在这种情况下,在每个
    $(CC)…
    行之前应该有并且只有一个选项卡


    “无规则生成目标”错误意味着您要求
    make
    根据Makefile给定的规则更新目标,但更新该目标所需的规则不存在。这通常意味着您在命令行中指定了错误的目标名称


    例如,如果您正在使用上面的Makefile,但通过以下命令调用
    make
    makeoutput
    ,因为没有规则说明如何更新或生成
    output
    make
    将为您提供无规则错误。

    您的问题中的代码是否来自文件“start.mk”?是,makefile名称是start.mk是以
    $(CC)
    开头的一行,缩进了一个制表符(而不是空格)?是的,该行是以制表符开头的。答案对您没有帮助的原因是您对问题不小心。如果您的makefile被调用为
    start.mk
    ,为什么生成的输出列表
    linux.mk
    ?显然,您在提示下键入的内容与您在此处向我们显示的内容并不相同。其次,命令
    make-dstart.mk
    是错误的:如果要将makefile命名为非标准名称,则必须使用
    -f
    标志;它应该是
    make-d-fstart.mk
    。make:start.mk即将到来,无需任何操作。这是什么意思?@lokesharo将它们放在名为
    Makefile
    的文件中,然后尝试运行
    makeall
    @lokesharo,这
    start.mk
    来自何处?您的makefile的名称是什么?您用来调用
    make
    的确切命令(包括其所有选项)是什么?@lokesharo您需要
    -f start.mk
    。您会收到错误消息,因为您缺少
    -f
    ,因此
    make
    认为
    start.mk
    是一个目标。