从不同的源文件夹在一个文件夹中创建目标文件
Create object files in one folder from different source folders
我正在创建基于 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 存在于 module
下的 VPATH 中指定的目录中
*** 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 $<
我正在创建基于 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 存在于 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 $<