Makefile 从不同的源文件夹在一个文件夹中创建对象文件
我正在创建一个基于Keil的项目的Makefile。我现在有一个工作的Makefile,但是我已经为所有源文件手动编写了规则,如下所示:Makefile 从不同的源文件夹在一个文件夹中创建对象文件,makefile,gnu-make,keil,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 $@
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
)中,但源文件位于不同的级别和不同的文件夹中,如实用程序
、模块
等。是否有办法缩短我的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 $<
您可以为此使用VPATH。它可以在目录列表中搜索源文件。假设您可以列出目录列表:
VPATH = ../../../src src
CC = ARMCC
out/%.o : %.c
$(CC) -o $@ $(CFLAGS) -c $<
VPATH=../../../src src
CC=ARMCC
out/%.o:%.c
$(CC)-o$@$(CFLAGS)-c$<
啊,这绝对有帮助!如果你不介意的话,再问一个问题。所以我尝试了这个方法,但是因为我对用于创建二进制文件的每个.o都有显式规则,所以现在二进制创建规则(取决于每个对象文件)出现了问题,因为创建对象文件的显式规则消失了。我不确定这是否是因为这个新加入的或者其他我做得不正确的原因。@rookie,如果没有看到规则,这将很难确定。我怀疑这是因为对象文件在out/
中,但它正在当前目录中查找它们。但那只是猜测而已,我同意。当然,你的规则是错误的,但是因为你既没有显示规则,也没有显示准确的错误消息,所以我们没有什么可说的。我在问题中添加了一些内容来澄清问题,我希望这会有所帮助。这是你应该发布的另一个问题。但是,这意味着它在任何VPATH路径中都找不到“abc.c”。您可以运行make-d
,查看有关它所查找内容的更多信息。
VPATH = ../../../src src
CC = ARMCC
out/%.o : %.c
$(CC) -o $@ $(CFLAGS) -c $<