Linux下automake工具生成C\C++库文件

写在前面

C/C++编译成二进制和编译成库文件可以通过gcc/g++实现,但若处理多个文件时,利用gcc/g++就显得较为麻烦,故出现了利用Makefile自动编译。Makefile让编译器知道要编译一个文件需要依赖其他的哪些文件,当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。

Makefile文件可以手动编写,也可以自动生成。自动生成Makefile文件的工具有automake和cmake,这里主要介绍automake工具 工作流程。

这里基于《Linux下编译C/C++二进制文件和动态链接库并调用》中的myAPI.cpp、myAPI.h进行实验。将myAPI.cpp利用Makefile文件在生成deb包时自动编译成库文件(.so文件)。

automake生成Makefile流程

(开始最好创建一个目录,然后在该目录下进行后续操作,这里我创建了一个automake_test目录)

1、将需要编译的源码文件拷到该目录下,这里是myAPI.cpp和myAPI.h文件。

创建Makefile.am文件,并对其进行编辑。文件内容如下:
lib_LTLIBRARIES = libmyAPI.la
libmyAPI_la_SOURCES = myAPI.cpp
include_HEADERS = myAPI.h
Makefile.am文件内容
2、执行autoscan命令,得到configure.scan文件,然后将该文件改名为configure.ac,并对其进行编辑,修改内容如下:
configure.ac文件内容
主要是修改AC_INIT和添加AM_INIT_AUTOMAKE、AC_PROG_LIBTOOL
包名我这里设置为“myapi”、版本号设置为“3.0”(这里可以根据自己的需要自行设置)

3、执行aclocal命令,生成autom4te.cache(这里就是个中间文件,可以不用管)
aclocal命令执行结果
4、执行autoconf命令,生成文件configure。(这个文件比较重要,后面生成Makefile需要用到)
autoconf命令执行结果
5、执行autoheader命令,生成config.h.in。
autoheader命令执行结果
6、执行automake --add-missing 命令,根据configure.ac文件的内容安装了一些文件。
automake执行
这里报错,原因是缺少一些目录,创建缺少的目录。(这里AUTOHORS应该是AUTHORS,手误)
创建目录结果
再次automake
报错again
这里又报错了,找到的解决方法,
解决办法
再 $libtoolize --automake --copy --debug --force

然后automake成功
成功!
7、执行./configure生成Makefile文件
执行./configure
生成了Makefile文件
8、以上就已经生成了我们所需要的Makefile文件,若想直接生成库文件,可以执行make命令
执行make
生成的.so库文件

deb包生成过程

首先执行make distclean,将之前make生成的一些文件删除掉(通过make编译生成的库文件等),然后使用编包的方法来编译库文件。
make disclean 执行结果
因为在编包的时候会生成一些文件,为了使我们能更清楚的找到这些生成的文件并保持目录的干净,这里我们创建一个目录automake_debian_test,将刚刚是automake_test目录拷贝到此目录下,此时我们主要做的就是将automake_test打包成deb包。
拷贝结果
这里直接将automake_test打包是不合适的,因为包名含有下划线,且未说明版本号,故将包名改为automake-myapi-3.0,然后再将该目录压缩成.tar.gz
修改包名
压缩
压缩结果
前面都为准备工作,下面我们进入automake-myapi-3.0目录,也为工作目录,源码包目录。执行dh_make创建Debian目录。
生成Debian目录
Debian目录
一般需要修改debian/changelog 和 debian/control 文件,修改完成后,回到工作目录下,执行debuild命令
执行debuild
回到automake_debian_test目录下,可以看到编译好的deb 包
编译结果
进入对应目录可以查看生成的库文件。
编译结果
编译 结果

安装deb包并调用库文件

安装deb包
调用库文件
在这里插入图片描述

运行在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值