Makefile - 将对象添加到文件夹

时间:2016-07-08 14:46:23

标签: makefile

我不明白为什么会这样:

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”,这让我感到困惑......

1 个答案:

答案 0 :(得分:0)

那是因为有一条内置规则知道如何从X.c为任何X构建output/X.o,但是没有内置规则知道如何从src/X.c构建output/%.o : src/%.c $(COMPILE.c) $(OUTPUT_OPTION) $< 。怎么会有这样一个内置规则,它知道你提出的任何特殊目录结构?

您必须定义自己的规则:

banana