我将按照手册进行操作,以了解有关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/目录,而源代码文件位于项目的根目录中,如下所示:

objs/
*。C
*。H

我如何仍可以使用隐式规则而不必将目标文件编译到源文件目录中?

最佳答案

您只需定义自己的隐式规则,因为内置规则不会为您做到这一点。

尝试:

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

关于c - 带有不同目录的Makefile隐式规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39945899/

10-12 17:16