c-如何在Makefile中为位于多个目录中的文件创建一个静态库,而不指定文件名



我需要使用不同目录中的源文件创建一个静态库。我能够通过在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 = Source1A.c SourceB.c Source2C.c Source3D.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。有可能做到吗?我试图搜索这个问题,许多来源解释了如何创建静态库,但我看不到这个问题的任何替代解决方案。

在不了解开发环境细节的情况下,我会先尝试这些最小的更改。对源目录使用通配符函数将使您能够添加更多的源,而不必每次都编辑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 $@  $<

相关内容

最新更新