在Linux操作系统下自动生成Makefile的方法

在Linux操作系统下进行开发,编写Makefile似乎是不可缺少的事情。但是对于一个比较大的工程,编写一个符合规范的Makefile并非易事。而且由于Makefile的各种显式,隐式规则,加之平时并不经常编写Makefile,导致我们写一个Makefile文件变得更加困难了。 幸好Linux社区有一群非常懒,又非常勤奋得程序员,他们开发了一个可以自动生成Makefile文件得工具,这就是autotools.该工具可以通过扫描源文件,自动生成一个Makefile文件。是不是很神奇!下面是生成Makefile的一个整体流程,我们后面慢慢介绍。

安装autotools 有的系统可能并没有autotools工具,需要手动安装,以Ubuntu为例,可以通过如下命令进行安装: sudo apt install automake 完成安装之后就可以使用autotools进行下面的流程了。 生成configure.ac文件 首先我们要准备一些源文件,如下图是本文准备的源文件。本文以C++语言开发的程序为例,其中main.cpp是主程序所在文件,而async_network*和storage*分别是网络通信模块和本地存储模块,分别封装了一个C++类来实现具体的功能。本文通过多个文件是为了增加项目的复杂性。源文件的具体内容本文不再赘述,因为这个与内容无关。

完成对源文件创建后,我们就可以通过autoscan命令对该目录进行扫描,生成configure.scan文件。首先切换到该目录,然后执行命令,具体如下: autoscan 执行成功后可以看出多了两个文件,一个是autoscan.log,这个是日志文件;另外一个是configure.scan文件,这个是扫描的结果文件。

这里configure.scan其实是一个模板文件,我们需要手动修改一下其内容,并将其改名为configure.ac。具体需要做: 1) AC_INIT里面的参数: AC_INIT(main,1.0, sunnyzhang@126.com); 2) 添加宏AM_INIT_AUTOMAKE; 3) 在AC_OUTPUT后添加输出文件Makefile。 完成修改后的文件内容如下:

生成aclocal.m4文件 直接执行aclocal命令即可生成该文件: aclocal aclocal.m4是一个宏定义文件,该文件内容的生成依赖于configure.ac文件。aclocal会根据confgure.ac文件的内容,搜索本地的m4文件(通常在类似目录下面/usr/share/aclocal-1.15/),然后生成一个在本目录下面使用的aclocal.m4文件。 生成config.h.in文件 该文件的生成比较简单,直接在命令行执行如下命令即可: autoheader 这个文件是一个模板文件,后面会利用该文件生成config.h文件。该文件包含一些宏定义。 生成Makefile.in文件 生成Makefile.in文件之前需要首先手动的创建一个Makefile.am文件,该文件用于描述源文件与目标文件的关系。本文对应的Makefile.am文件如下所示:

可以看出该文件非常简单,这比写一个Makefile要简单的多。 如果要生成多个目标文件,需要在这里写多个源文件与目标文件的对应关系。这种情况是非常常见的,比如一些复杂的项目中通常会包含主程序,测试程序,动态库等等。 生成configure文件 上述文件都生成后就可以生成configure文件了。该文件是用于生成Makefile的一个脚本。我们在很多开源项目中肯定都遇到过。在开源项目中通常都有一个生成好的configure文件,我们只需要执行该文件就可以生成Makefile。 生成configure文件的方法很简单,我们执行如下命令即可: autoconf 至此我们完成了生成Makefile的所有准备工作,然后我们在该目录下面运行configure脚本,即可生成Makefile文件。 ./configure 可以看出,在整个过程中我们只需要手动修改或者创建2个文件,而且修改的内容很少。最后我们就可以得到一个完整的Makefile文件。对于大型的软件项目,这种方法无疑是非常有效的。 今天的内容就到这里,大家只需要按照步骤运行就可以生成Makefile文件。后续我们在对每个工具进行更加深入的介绍,这样大家不仅能知其然,还能知其所以然。

这里推荐大家可以看看腾讯课堂零声学院 Linux C/C++ 高级开发架构的【免费】课程:

C/C++Linux服务器开发/后台架构师【零声学院】-学习视频教程-腾讯课堂​ke.qq.com

课程内容的话和腾讯C++后台开发T8职级技术栈对标,围绕数据结构与算法、数据库、网络、操作系统、网络编程、分布式架构等方面全面提升,值得学习一波~

还有一份大厂面经集合:

和技术路线总结图:

 

资料领取

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值