Makefile 将文件放入不同文件夹时的通用生成规则帮助

Makefile 将文件放入不同文件夹时的通用生成规则帮助,makefile,Makefile,我有这样的规矩。我希望它定义一个通用规则,描述将任何C文件转换为编译对象文件的过程。它工作正常,但我想把我的C文件保存在一个文件夹中,把输出文件保存在另一个文件夹中 以下是Makefile本身的相关片段: .SUFFIXES .c .o .c.o : $(GCC) -c $(CFLAGS) $< -o $@ .suffix.c.o .c.o.: $(GCC)-c$(CFLAGS)$

我有这样的规矩。我希望它定义一个通用规则,描述将任何C文件转换为编译对象文件的过程。它工作正常,但我想把我的C文件保存在一个文件夹中,把输出文件保存在另一个文件夹中

以下是Makefile本身的相关片段:

 .SUFFIXES .c .o


.c.o :
    $(GCC) -c $(CFLAGS) $< -o $@
.suffix.c.o
.c.o.:
$(GCC)-c$(CFLAGS)$<-o$@

我想修改这个makefile规则,告诉make在一个文件夹中查找源(C)文件,比如说
$(C_DIR)
,运行GCC,然后将OBJ文件放入
$(O_DIR)

后缀规则无法做到这一点。为了做到这一点,您必须使用非POSIX标准make特性。GNU make(例如,GNU/Linux系统上的标准make,可用于几乎任何其他平台)提供了可以实现这一点的模式规则:

SRCS = foo.c bar.c baz.c

OBJS = $(addprefix $(O_DIR)/,$(SRCS))

all: $(OBJS)

$(O_DIR)/%.o : $(C_DIR)/%.c
        $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
SRCS=foo.c bar.c baz.c
OBJS=$(addprefix$(O_DIR)/,$(SRCS))
全部:$(OBJS)
$(O_DIR)/%O:$(C_DIR)/%C
$(CC)-c$(CPPFLAGS)$(CFLAGS)-o$@$<

注意,模式规则根本不需要
后缀:
目标。