趣文网 > 作文大全

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

2020-12-01 21:40:01
相关推荐

在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, sunnyzhangAT126.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文件。后续我们在对每个工具进行更加深入的介绍,这样大家不仅能知其然,还能知其所以然。

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

读书真好作文 高考优秀满分作文 微笑作文450字 赞美学校的作文 点滴真情作文 写风景的作文400字 留住什么作文 小学一年级作文大全 我的朋友作文800字 静待花开作文 初二作文题目大全 状物作文400字 舌尖上的美味作文 饺子的做法作文 九年级作文800字 包容作文800字 写景作文开头和结尾 初中作文400字左右 青春的味道作文 为什么点赞作文 爬长城的作文 最温暖的陪伴作文 四年级下册作文题目 橘子洲头作文 一年级作文30字 红色革命作文 梅花的作文300字 描写油菜花的作文 我的童年作文500 珍惜当下作文