c - gcc - Makefile:添加依赖规则后目标“全部”的配方失败
问题描述
我有一个每次运行时都会失败的 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]: An Introduction to Makefiles了解更多详情。
为了使Makefile更紧凑,可以采取更进一步的措施(例如编写一个可以处理所有文件的模式规则)。
@EDIT0:
根据@o11c 的评论,我删除了部分不正确的答案
推荐阅读
- java - 如何检查用户输入是否为 char 值?
- xgboost - 如何将 SageMaker xgboost 的 eval_metric 设置为 f1?
- php - 如何使用php获取数据库表内两列中的数据
- flutter - 颤振图像拟合对齐
- java - 如何在项目出现之前返回节点的值?
- ios - ios 可访问性 magictap 不会传播到选项卡视图之外
- android - 在 Android 11 上添加到主屏幕功能
- excel - Excel中有没有办法根据单元格样式对单元格进行排序?
- python - 将标签添加到 OneLineAvataListItem Python kivy
- c++ - 命名空间范围在 C++ 中如何工作?