我有一个简短的Make脚本,如果我自己手动将Build目录作为字符串放入而不是作为变量,则该脚本有效:
CC = gcc
CFLAGS = -O2 -g -Wall -fmessage-length=0
LDFLAGS =
SRCDIR = Src
BUILDDIR = Build
SRCS = $(SRCDIR)/Main.c
OBJS = $(SRCS:.c=.o)
LIBS =
TARGET = HelloWorld
all: dir $(SRC) Build/$(TARGET)
dir:
mkdir -p $(BUILDDIR)
Build/$(TARGET): $(OBJS)
$(CC) $(LDFLAGS) $(OBJS) -o $@
$(SRCDIR).c.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
它停止使用错误消息:
make: *** No rule to make target `/HelloWorld', needed by `all'. Stop.
当我更换线路时:
all: dir $(SRC) Build/$(TARGET)
使用:
all: dir $(SRC) $(BUILDDIR)/$(TARGET)
为什么Make不用$(BUILDDIR)
替换Build
子句?
答案 0 :(得分:3)
在您的代码中,Build
之后有一个空格BUILDDIR = Build