从目标文件列表 (*.o) 构建库 (lib.a) 的 makefile

Posted

技术标签:

【中文标题】从目标文件列表 (*.o) 构建库 (lib.a) 的 makefile【英文标题】:makefile which build the library (lib.a)from the list of object files (*.o) 【发布时间】:2011-03-24 22:31:30 【问题描述】:

我有一个问题,因为我从未编写过任何 makefile。因此,如果有任何人可以帮助我,我会变得快乐。我有很多不同的 .o 文件,它们存储在不同的文件夹中。例如:

文件夹1:obj1.o 文件夹 2:obj2.o 文件夹3:obj3.o

我需要makefile,它将从我发送到makefile(如param)的文件中构建库。参数也应该是 makefile 并包含有关存储必要文件的文件夹的信息。

例如,我想从没有文件夹 3 的文件夹 1 和文件夹 2 中存储的对象构建 lib。所以我作为参数发送到主makefile的makefile必须包含到folder1和folder2的路由:

local_libs := ../folder1 local_libs += ../folder2

main makefile 应该解析该信息并调用 libtool utilite 以从该文件夹中的文件创建 lib。有人可以帮忙吗?

我想它很容易实现,例子会很棒!

【问题讨论】:

【参考方案1】:

您需要一个规则来输入.o 文件,输出.a 文件并调用ar 命令来完成这项工作。比如:

lib.a: $(OBJECTS)
    $AR -cr $@ $^

【讨论】:

那么作为makefile发送参数呢,我对这个比实现规则更感兴趣......【参考方案2】:

GNU make 不支持在命令行传递参数“到makefile”

在执行 makefile 时,您有两种基本机制来设置 make 使用的参数(我假设您使用的是 GNU make,并不是他的所有建议都适用于其他 make):

写入子生成文件,可能使用脚本。如果你的makefile有一行像

include file.mk

gmake 将包含file.mk 的内容。改变file.mk 的内容,你就改变了你的makefile 的行为。

Make 可以在设置时从环境变量中获取变量值。这提供了一个强大的机制,让用户自定义你的makefile的行为。

【讨论】:

所以我必须将我的路由包含到 file.mk 中,然后将其包含到我的 makefile 中。之后如何使用存储在 file.mk 中的信息?是不是通常的变量? @user:这是一个选项。我不确定您想要实现什么,但这些是您选择“传递参数”到由 GNU make 处理的 makefile 的选择。 submakefile 的内容是 make 命令。您可以设置变量、建立依赖关系或其他任何您可以在 make 中执行的操作。 submakefile 成为包含它的文件的 part 我可以这样做吗:file.mk: local_obj := ../folder1 local_obj += ../folder2 然后我将它包含到我的makefile中:include file.mk 并在此处运行libtool对于存储在 local_obj 中的路由? @user:是的。您可以在包含的文件中执行您可以在主 makefile 的主体中执行的任何操作。 酷,也许您可​​以提供从对象构建库的有效规则示例?

以上是关于从目标文件列表 (*.o) 构建库 (lib.a) 的 makefile的主要内容,如果未能解决你的问题,请参考以下文章

iOS 测试目标构建中断,没有为正确的架构构建库

Cmake错误构建库

使用mingw构建库时如何生成pdb文件?

STM32-构建库函数雏形

npm install 是不是也构建库?

使用 Proguard 构建库时找不到 aapt_rules.txt