GNU大型项目构建和覆盖率生成(第一篇)
目录
0. 序言
在开始正文之前,请允许我先说明一下本文的目的和写作的动机,好让读者不惑。
我们知道,在Linux环境中,很多软件的组织都遵循GNU软件标准。不论是自己开发GNU软件还是阅读别人写好的源程序,能了解、熟悉GNU项目的构建方式,对我们的工作会起到事半功倍的效果。本文的目的,就是从零开始,告诉大家怎么构建一个GNU项目,如何阅读GNU源程序。
文章会涉及到的工具有:
- automake
- autoconf
- aclocal
- gcc、gfotran
- makefile
- libtool
- gcov、 gcovr
在阅读本文之前,上述工具需要安装部署完成,同时期望读者对一下的知识和技能有一定的了解和掌握:
- C、C++、Fortran语言
- 基本的编译、链接过程和原理
- Makefile基本知识
- Linux-shell基本命令
不要被前面的要求吓到,笔者也是从对上面知识一无所知,经过两三周时间摸索,写出了这篇文章的。文章内容涉及到的知识不够深刻,但是基本上可以帮助像半个月前的笔者一样茫然的入门者。文章中不严谨的表述或者表述、理解方面的错误,欢迎大家留言指正。
另外,本文只是告诉大家如何快速的完成一个GNU项目。其中涉及到的autotools工具和相关语言的细节,请大家阅读文章后面的链接文章。
好了,我们开始正文!
1. 项目描述
这一章节,主要说明我们的目的:
我们最终要完成一个deep
风格的项目组织。项目使用c和Fortran混合编程,利用GNU-autotools来完成项目构建,利用gcov完成项目覆盖率分析。最后形成通过覆盖率分析优化后的项目发布包。该发布包能够直接发布在网络,供其他用户下载、安装并使用。
项目最终的目录如下:
➜ csdemo tree . ├── AUTHORS ├── auto.sh ├── ChangeLog ├── data │ └── thch │ └── JANAF ├── doc │ └── README ├── examples ├── makeconfig │ └── make.global ├── NEWS ├── preprocessor ├── README ├── src │ ├── alge │ │ ├── alge.c │ │ └── alge.h │ ├── apps │ │ └──csrun.c │ ├── base │ │ ├── addfld.f90 │ │ └── paramx.f90 │ ├── bft │ │ ├── bft.c │ │ └──bft.h │ ├── cdo │ │ ├── cdo.c │ │ └──cdo.h │ ├── cogz │ │ └── matmul.f90 │ ├── comb │ │ ├── comb.c │ │ └──comb.h │ └── lib └── test
读者可以在这里下载源码。
下面我们就通过几个章节的内容,详细的说明如何从零开始生成这个项目。
2. 项目构建
我们将这个项目放置在csdemo
路径下面:
这里:data路径下面存放项目的数据文件,doc为项目的说明文档,examples存放用户案例,test存放测试用例,preprocessor存放前处理相关程序,src存放主体程序代码。在src下面alge是c语言文件,apps是用户可执行程序,其他子文件夹分别完成一些特定的功能。
将下载到的源码分别复制进对应的路径得到如上文的项目组织。下一步我们就要开始进行项目构建。
项目的构建一般可以通过一下几步来完成:
- 在每个需要编译的子路径下面编写编译规则
Makefile.am
文件。 - 在根目录(项目根目录)下执行
autoscan
命令,形成configure.scan
文件 - 将
configure.scan
文件命名为configure.ac
- 按照规则修改
configure.ac
文件 - 执行
aclocal
文件,形成m4
宏命令(有时需要手动编写