makefile如何输出到单独的构建目录

时间:2018-06-15 17:52:09

标签: makefile

我有这个目录结构:

makefile
src
    foo.c
build

我的目标只是构建foo.c并将构建文件输出到构建目录。

我有以下makefile:

SRCS_DIR := ./src
BUILD_DIR := ./build

SRCS := $(shell find $(SRCS_DIR) -name "*.c")
OBJS := $(subst $(SRCS_DIR),$(BUILD_DIR),$(SRCS))
OBJS := $(OBJS:.c=.o)

test.exe: $(OBJS)
    gcc $(OBJS) -o $@

%.o: %.c
    gcc -c $< -o $@

问题是模式规则。其中一个目标文件是build/foo.o。问题是%.c变为build/foo.c,但不存在。我希望%.c取而代之的是src/foo.c,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

模式的主干必须完全匹配。因此,如果您想要一个将事物放入不同目录的模式,您必须修改模式,以便不匹配的部分不是词干的一部分。所以你可以写:

build/%.o : src/%.o
        gcc -c $< -o $@

以便%仅匹配公共字符串。