繁体   English   中英

gcc-Makefile:添加依赖性规则后,目标“全部”的配方失败

[英]gcc - Makefile: recipe for target 'all' failed after adding dependency rule

我有一个Makefile,每次运行它都会失败。 我一直在修改一个Makefile,该文件将一堆文件编译到一个尚未创建的目录中。 all:失败,老实说,我不知道为什么会这样。

这是我的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) ,但我不知道该怎么办。 最后一个问题,我问StackOverflow上给了我一些资源(如GNU的文档在这里 )。 根据我的理解, $(BINDIR)应该在运行make时首先生成,然后其他规则应该没有任何问题地执行。

这是我收到的错误,我知道这意味着在其余规则执行之前未创建$(BINDIR)

user@user-Notebook:~/project/folder$ make
../bin \
    ../bin/program1 \
    ../bin/program2 \
    ../bin/program3
make: ../bin: Command not found
Makefile:16: recipe for target 'all' failed
make: *** [all] Error 127

我想念什么?

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

$(BINDIR)/ program )作为所有目标而不是命令的依存关系会更有意义:

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

有关更多详细信息,请参见[GNU]:Makefile简介

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

@ EDIT0

根据@ o11c的评论,我删除了部分错误的答案

如当前所写,您的“全部”规则没有依赖项,并且配方也不为空。 因此make正在尝试将您的依赖项列表作为shell指令执行。 这就是为什么您看到命令未找到错误的原因,它来自外壳程序。 完全删除换行符all:它应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM