我有一个 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)/*
Run Code Online (Sandbox Code Playgroud)
我知道问题与 相关$(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
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
将此作为答案发布,因为它不适合评论:
$(BINDIR) ( /program )更有意义,它依赖于所有目标,而不是命令:
all: $(BINDIR) $(BINDIR)/program1 $(BINDIR)/program2 $(BINDIR)/program3
Run Code Online (Sandbox Code Playgroud)
查看[GNU]:Makefile 简介了解更多详细信息。
为了使Makefile更加紧凑,事情还可以更进一步(例如编写一个可以处理所有文件的模式规则)。
@编辑0:
根据 @o11c 的评论,我删除了部分不正确的答案
| 归档时间: |
|
| 查看次数: |
12646 次 |
| 最近记录: |