[英]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.