我有这样的制定规则。我希望它定义一个通用规则,描述将任何C文件转换为编译的Object文件。它工作正常,但我想将我的C文件保存在一个文件夹中,并将文件输出到另一个文件夹中。
以下是Makefile本身的相关片段:
.SUFFIXES .c .o
.c.o :
$(GCC) -c $(CFLAGS) $< -o $@
我想修改这个makefile规则,告诉make在一个文件夹中找到源(C)文件,比如说$(C_DIR)
,运行GCC然后把OBJ文件放到$(O_DIR)
?
答案 0 :(得分:1)
您无法使用后缀规则执行此操作。为此,您必须使用非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 $@ $<