【发布时间】:2018-03-07 05:02:16
【问题描述】:
我正在创建一个基于 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),但源文件位于不同级别和各种文件夹中,如utilities、modules 等。有没有办法缩短我的 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 路径中都找不到“abc.c”。您可以运行
make -d并查看有关它要查找的内容的更多信息。