Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从对象文件列表(*.o)生成库(lib.a)的makefile_C++_Unix_Gcc_Makefile_Gnu - Fatal编程技术网

C++ 从对象文件列表(*.o)生成库(lib.a)的makefile

C++ 从对象文件列表(*.o)生成库(lib.a)的makefile,c++,unix,gcc,makefile,gnu,C++,Unix,Gcc,Makefile,Gnu,我有一个问题,因为我从来没有写过任何makefile。所以如果有人能帮我,我会变得快乐。我有很多不同的.o文件,它们存储在不同的文件夹中。例如: folder1:obj1.o folder2:obj2.o folder3:obj3.o 我需要makefile,它将根据我发送到makefile的文件(如param)构建库。参数也应该是makefile,并包含有关存储必要文件的文件夹的信息 例如,我想从存储在folder1和folder2中的对象构建lib,而不使用folder3。因此,作为参数发送

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

folder1:obj1.o
folder2:obj2.o
folder3:obj3.o

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

例如,我想从存储在folder1和folder2中的对象构建lib,而不使用folder3。因此,作为参数发送到主makefile的makefile必须包括到folder1和folder2的路由:

本地库:=../folder1
本地_libs+=../folder2

主makefile应该解析该信息,并调用libtool utilite从该文件夹中的文件创建lib。有人能帮忙吗


我想这很容易实现,示例将非常好

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

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

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

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

  • 写入子基文件,可能使用脚本。如果makefile有一行

    include file.mk
    
    gmake将包含
    file.mk
    的内容。更改
    file.mk的内容,就可以更改makefile的行为

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


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