从不同的源文件夹在一个文件夹中创建对象文件



我正在创建一个基于 Keil 的项目的 Makefile。我现在有一个有效的 Makefile,但我为所有源文件手动编写了规则,如下所示:

out/abc.o: ../../../src/modules/abc.c
       ARMCC -o $@ $(FLAGS) $^ 
out/def.o: ../../../src/utilities/def.c
       ARMCC -o $@ $(FLAGS) $^ 
out/xyz.o: src/xyz.c
       ARMCC -o $@ $(FLAGS) $^ 

这已经变得有点长了。目标文件需要位于一个目录(/out(,但源文件位于不同的级别和不同的文件夹中,如utilitiesmodules等。有没有办法缩短我的 Makefile,以便它扫描这些不同级别的源文件并创建目标文件?

编辑:答案的后续问题。我的链接器规则是这样的,以及 VPATH 添加。我在 VPATH 中添加了一个目录,其他目录仍在显式编译。

OBJECT_FILES=out/abc.o out/def.o out/xyz.o
out/binary.axf: $(OBJECT_FILES)
               ARMLINK $(MANY_FLAGS) $^ -o $@
VPATH=../a/b/c/module
out/%.o : %.c
        $(CC) $(C_FLAGS) $(INCLUDE_PATH) -o $@ --depend out/%.d $<

我现在收到一个错误,指出 abc.o. abc.c 没有规则,该规则存在于 VPATH 中指定的目录中module

*** No rule to make target `out/abc.o', needed by `out/binary.axf'.  Stop.

您可以使用 VPATH 来实现此目的。 它可以在目录列表中搜索源文件。 假设你可以想出目录列表:

VPATH = ../../../src src
CC = ARMCC
out/%.o : %.c
        $(CC) -o $@ $(CFLAGS) -c $<

相关内容

最新更新