在Linux下C/C++多模块编译链接的一种方法
以前一直不会C/C++工程在Linux下的编译,大概知道需要写Makefile,但是看见Makefile那么长就头疼,一直也没有学习。直到这次在GitHub上clone下的代码需要编译时,才不得不面对他。也是这次才发现可以使用automake工具进行自动生成Makefile。这对懒癌晚期的我可谓是一大福音。在学习使用的时候中间也踩了不少坑,在这里记录一下,省的后面忘记了。
0x00 主要工具
本blog主要记录实现方法,其中每一步使用工具的介绍通过链接给出,写的肯定比我好,记录一下,后面忘了回去回顾。其中使用的主要工具有:
1、autoscan,autoconf和automake:
https://www.ibm.com/developerworks/cn/linux/l-makefile/
2、Makefile.am文件:
https://www.jianshu.com/p/2f5e586c3402
0x01 过程
假设已经编写完成Makefile.am文件,具体如何编写参考上面的链接。
1、进入源文件目录使用autoscan
命令,生成configure.scan
2、进入configure.scan文件,在AC_INIT宏之后加入AM_INIT_AUTOMAKE(Test, 1.0),这里Test是你要编译成的软件的名称,1.0是版本号,即你的这些源程序编译将生成一个软件Test-1.0版。然后退出,把configure.scan文件改名为configure.in。
3、运行aclocal
,生成aclocal.m4文件。
4、运行autoconf
命令,生成Configure文件。
5、运行autoheader
。
6、运行automake --add-missing
命令。其中重点关注是否有Makefile.am:error: required file './XXX' not found
提示,其中XXX为某些文件名。如果出现这样的提示,请自行创建该文件(亲测使用vim创建对应文件名的空文件即可)。否则在后面使用automake时会提示无法生成Makefile.in文件,导致后续过程无法继续。
7、运行./Configure
命令,生成Makefile。
8、运行make
命令,编译链接工程,生成可执行文件。
0x02 后记
以后就可以通过编写Makefile.am文件,自动生成符合GNU标准的UNIX/Linux标准的Makefile。记录一下,以后再出现这种情况就可以直接使用了。
看的我热血沸腾啊https://www.ea55.com/