我不明白为什么会这样:
CC = gcc
CFLAGS = -fPIC
LDFLAGS = -shared
SRC = src/file.c
OBJ := $(SRC:.c=.o)
test: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
这不是:
CC = gcc
CFLAGS = -fPIC
LDFLAGS = -shared
SRC = file.c
OBJ := $(addprefix output/, $(SRC:.c=.o))
SRC := $(addprefix src/, $(SRC))
test: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
因为我只想为所有OBJ创建一个输出文件夹。 海湾合作委员会告诉我,没有规则可以制作“输出/文件.o”,这让我感到困惑......
答案 0 :(得分:0)
那是因为有一条内置规则知道如何从X.c
为任何X
构建output/X.o
,但是没有内置规则知道如何从src/X.c
构建output/%.o : src/%.c
$(COMPILE.c) $(OUTPUT_OPTION) $<
。怎么会有这样一个内置规则,它知道你提出的任何特殊目录结构?
您必须定义自己的规则:
banana