gcc-Makefile:target';全部';添加依赖项规则后失败

gcc-Makefile:target';全部';添加依赖项规则后失败,c,gcc,makefile,C,Gcc,Makefile,我有一个生成文件,每次运行它都会失败。我一直在修改一个Makefile,该Makefile将一堆文件编译到一个目录中,如果还没有,则需要创建该目录全部:失败了,我真的不知道为什么会失败 以下是我的Makefile的外观: CC=gcc SRCDIR=src INCDIR=include BINDIR=../bin CFLAGS = -flags LIBS = -llibrary1 -llibrary2 all: $(BINDIR) \ $(BINDIR)/program1 \

我有一个生成文件,每次运行它都会失败。我一直在修改一个Makefile,该Makefile将一堆文件编译到一个目录中,如果还没有,则需要创建该目录<代码>全部:失败了,我真的不知道为什么会失败

以下是我的Makefile的外观:

CC=gcc
SRCDIR=src
INCDIR=include
BINDIR=../bin
CFLAGS = -flags
LIBS = -llibrary1 -llibrary2

all: 
    $(BINDIR) \
    $(BINDIR)/program1 \
    $(BINDIR)/program2 \
    $(BINDIR)/program3

$(BINDIR)/program1: $(SRCDIR)/program1.c | $(BINDIR)
    $(CC) $(CFLAGS) $< -o $@ $(LIBS)

$(BINDIR)/program2: $(SRCDIR)/program2.c | $(BINDIR)
    $(CC) $(CFLAGS) $< -o $@ $(LIBS)

$(BINDIR)/program3: $(SRCDIR)/program3.c | $(BINDIR)
    $(CC) $(CFLAGS) $< -o $@ $(LIBS)

$(BINDIR):
    mkdir -p $@

clean:
    rm -f $(BINDIR)/*

我遗漏了什么?

将此作为答案发布,因为它不适合作为评论:

将更有意义的是,$(BINDIR)/program)依赖于所有目标,而不是命令:

all: $(BINDIR) $(BINDIR)/program1 $(BINDIR)/program2 $(BINDIR)/program3
查看更多详细信息

为了使Makefile更加紧凑,可以采取更进一步的措施(例如编写一个处理所有文件的模式规则)

@EDIT0


根据@o11c的评论,我删除了答案中不正确的部分

,因为当前编写的“全部”规则没有依赖项,并且不是空配方。因此,make试图将依赖项列表作为shell指令执行。这就是为什么您会看到命令notfound错误,它来自shell。删除
all:
之后的换行符,它应该可以工作

From:请注意:您需要在每个命令行的开头添加制表符!这是一种让粗心的人捉摸不透的默默无闻。我不确定它们是由于复制/粘贴而丢失的,还是在示例makefile中确实丢失了。不过,如果缺少选项卡,
make:../bin:Command not found
就没有意义了。因此,可能情况正好相反:您希望
all:$(BINDIR)
作为依赖项,但插入选项卡。因此,当您
makeall
时,它会尝试执行
$(BINDIR)
。可能是,看看链接的文档。并试着理解它是如何工作的(不是全部,而是足以让makefile运行的位)。只需在
all:
之后添加一个反斜杠即可。对于转义行,制表符的区别并不重要。不,
|
是正确的,以避免关心目录时间戳。@o11c:谢谢您的输入。我更正了答案。谢谢!!这就是我错过的@凯特:很高兴能帮上忙!(代表所有相关人员)
all: $(BINDIR) $(BINDIR)/program1 $(BINDIR)/program2 $(BINDIR)/program3