我有这个目录结构:
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
,但我不知道该怎么做。
答案 0 :(得分:2)
模式的主干必须完全匹配。因此,如果您想要一个将事物放入不同目录的模式,您必须修改模式,以便不匹配的部分不是词干的一部分。所以你可以写:
build/%.o : src/%.o
gcc -c $< -o $@
以便%
仅匹配公共字符串。