【问题标题】:How to create a static library for the files located in multiple directories with out specifying files names in the Makefile [duplicate]如何为位于多个目录中的文件创建静态库而不在 Makefile 中指定文件名 [重复]
【发布时间】:2022-01-04 18:36:00
【问题描述】:

我需要使用不同目录中的源文件创建一个静态库。我可以通过在 Makefile 中指定每个源文件来创建静态库。它增加了 Makefile 中的更多内容。 让我用一个例子来解释一下我做了什么:

#Specifying the each and every source files to FILES is more complex to me. Trying to find out alternative to this problem

Files = Source1\A.c Source\B.c Source2\C.c Source3\D.c ........... Sorce3/Z.c

$(OUT_FILE_NAME): $(patsubst %.c,%.o,$(wildcard $(FILES)))
    ar -r -o $@ $^

#Compiling every *.c to *.o
%.o: %.c dirmake
    arm-none-eabi-gcc -c -o $@  $<

我正在尝试探索在 Makefile 中指定所有源文件的替代方法。如果添加了任何新的源文件,这将有助于我们不再修改此 Makefile。有可能这样做吗? 我试图搜索这个问题,许多来源解释了如何创建静态库,但我没有看到任何替代解决方案。

【问题讨论】:

标签: c gcc makefile static-libraries


【解决方案1】:

在不了解您的开发环境的详细信息的情况下,我会先尝试这些最小的更改。对源目录使用通配符功能将使您能够添加更多源,而无需每次都编辑 Makefile。只需保持目录中没有任何未使用的 c 文件,以避免在库中包含您不想要的内容。

我还通过使用 := 进行赋值使 Files 变量简单地扩展(评估一次)。我还简化了第一条规则的前提条件并修正了变量名的大小写。

Files := $(wildcard Source1/*.c) $(Source2/*.c) $(Source3/*.c)

$(OUT_FILE_NAME): $(patsubst %.c,%.o,$(Files))
    ar -r -o $@ $^

#Compiling every *.c to *.o
%.o: %.c dirmake
    arm-none-eabi-gcc -c -o $@  $<

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多