C语言编译工具学习总结

    在研发的过程中我们常常需要安装一些程序,其中一种重要的按照方式便是从源码安装。像Redis,mysql,php, nginx这些开源的程序都可以从源码。在我们下载到源码之后,在README文档中常常告诉我们执行以下命令即可安装:

./configure

make 或者make install

一直很好奇这是怎么样的一个过程。一番研究之后终于知道了些眉目。在这里总结一下。

    首先,我们看看这个configure 是什么,vim打开他,这是个shell脚本。他的作用是用来生成Makefile文件的。

    然后,我们看看make这个命令是干什么的,用man make 查看帮助,发现它是gnu回来维护一组程序的工具。直白的讲,就是用来根据源码生成可执行文件的工具。很好奇,这个工具咋就知道按照什么样的步骤将我们的源码编译成可执行文件呢?其实是根据./configure 生成的Makefile 来生成的。

    到这儿,我们可能已经明白了个大概。但是这次好奇心再次拷问我:./configure 是这么生成Makefilede 呢。于是我打开./configure 文件,没读几行,发现这简直是个天书。很想知道作者是怎么写成的。

    经过一番google+baidu,一个主要的脉络出来了:./configure 是可用手工编写,但对于大型项目,各种依赖相当复杂,加上不同平台上的posix接口差异,人工编写的难度极大。于是有人就开发了一系列的工具来生成这个文件。

    了解到这个背景之后,我们可以想象,如果是我们自己编写这样的一套工具会怎么做呢,首先我们要知道这些源码都是什么,有一些什么样的兼容性需要处理。因此需要扫描代码,于是第一个神器autoscan出现了。man autoscan,生成一个configure.scan 文件。目前离我们的./configure 还很远,在网上一番查询之后,aclocal,automake,autoconf 一系列神器相继出现。下面我们就来看看这些神奇是如何制造出configure文件的。

    1.将configure.scan 重命名为configure.ac,修改其中的一写配置,添加AM_INIT_AUTOMAKE() 宏,作为aclocal的输入生成aclocal.m4 文件。m4文件的内容就是一系列的宏。

    2.执行autoconf,  autoheader 把aclocal.m4 转换成config.h config.h.in

    3.编写Makefile.ac 配置可执行文件名称,代码等,通过automake -a 命令,生成configure。

到此大功告成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容