【问题标题】: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),但源文件位于不同级别和各种文件夹中,如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 存在于VPATH 中module 下指定的目录中

*** No rule to make target `out/abc.o', needed by `out/binary.axf'.  Stop.

【问题讨论】:

  • 您应该发布一个不同的问题。但是,这意味着它在任何 VPATH 路径中都找不到“abc.c”。您可以运行 make -d 并查看有关它要查找的内容的更多信息。

标签: makefile gnu-make keil


【解决方案1】:

您可以为此使用 VPATH。它可以在目录列表中搜索源文件。假设您可以提出目录列表:

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

CC = ARMCC

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

【讨论】:

  • 啊,这绝对有帮助!如果您不介意,请提出后续问题。所以我尝试了这个,但是因为我对每个用于创建二进制文件的 .o 都有明确的规则,所以现在二进制文件创建规则(取决于每个目标文件)现在抱怨,因为创建目标文件的明确规则是走了。我不确定这是因为这个新增内容还是我做错了什么。
  • @rookie 没有看到规则就很难确定。我怀疑这是因为目标文件位于out/ 中,但它正在当前目录中查找它们。但这只是猜测。
  • 同意。您的规则肯定是错误的,但由于您既没有显示规则,也没有显示确切的错误信息,因此我们无话可说。
  • 我在问题中添加了一些内容来澄清问题,希望对您有所帮助
猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多