在不同源文件夹

时间:2018-03-07 05:02:16

标签: makefile gnu-make keil

我正在创建一个基于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,它出现在module

下的VPATH中指定的目录中
*** No rule to make target `out/abc.o', needed by `out/binary.axf'.  Stop.

1 个答案:

答案 0 :(得分:3)

您可以使用VPATH。它可以搜索源文件的目录列表。假设您可以提供目录列表:

VPATH = ../../../src src

CC = ARMCC

out/%.o : %.c
        $(CC) -o $@ $(CFLAGS) -c $<