从目标文件列表 (*.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的主要内容,如果未能解决你的问题,请参考以下文章