Makefile隐含规则与不同的目录

时间:2016-10-09 16:32:01

标签: c makefile

我正在关注手册以了解有关Makefile的更多信息,因此我决定编写代码并将此示例(https://www.gnu.org/software/make/manual/make.html#Letting-make-Deduce-the-Recipes)应用于我项目的Makefile。

问题是我有一个单独的目录用于生成的目标文件,据我所知,隐式规则只会在与目标文件相同的目录中查找相应的.c文件。

我的makefile如下所示:

objects = $(addprefix objs/, main.o interface.o \
      build.o requests.o parse.o configure.o)

output: $(objects)
    gcc -o output $(objects)


objs/main.o: interface.h build.h requests.h parse.h configure.h
objs/interface.o: interface.h
objs/build.o: build.h
objs/requests.o: requests.h
objs/parse.o: parse.h
objs/configure.o: configure.h

.PHONY: clean
 clean:
    rm output $(objects)

我的目标文件应该转到源代码文件位于项目根目录的objs /目录中,如下所示:

的OBJ /
* .C
* .H

如何在不必将目标文件编译到源文件目录中的情况下仍然使用隐式规则?

1 个答案:

答案 0 :(得分:3)

您只需要定义自己的隐式规则,因为内置规则不会为您执行此操作。

尝试:

obj/%.o : %.c
        $(COMPILE.c) $(OUTPUT_OPTION) $<