从不同的源文件夹在一个文件夹中创建目标文件
Posted
技术标签:
【中文标题】从不同的源文件夹在一个文件夹中创建目标文件【英文标题】:Create object files in one folder from different source folders 【发布时间】: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
并查看有关它要查找的内容的更多信息。
【参考方案1】:
您可以为此使用 VPATH。它可以在目录列表中搜索源文件。假设您可以提出目录列表:
VPATH = ../../../src src
CC = ARMCC
out/%.o : %.c
$(CC) -o $@ $(CFLAGS) -c $<
【讨论】:
啊,这绝对有帮助!如果您不介意,请提出后续问题。所以我尝试了这个,但是因为我对每个用于创建二进制文件的 .o 都有明确的规则,所以现在二进制文件创建规则(取决于每个目标文件)现在抱怨,因为创建目标文件的明确规则是走了。我不确定这是因为这个新增内容还是我做错了什么。 @rookie 没有看到规则就很难确定。我怀疑这是因为目标文件位于out/
中,但它正在当前目录中查找它们。但这只是猜测。
同意。您的规则肯定是错误的,但由于您既没有显示规则,也没有显示确切的错误信息,因此我们无话可说。
我在问题中添加了一些内容来澄清问题,希望对您有所帮助以上是关于从不同的源文件夹在一个文件夹中创建目标文件的主要内容,如果未能解决你的问题,请参考以下文章