程序开发需要注意的细节很多,不仅需要用户有良好的技术,而且还需要开发利器帮助用户化难为易。在此介绍AutoTools工具在程序开发中的几个应用,帮助用户了解它是如何在程序开发中发挥作用,有什么便利之处。
源码路径
这里要研究的是在工程中如何指定源程序代码的路径。假设在hello1目录中,用户不将hello.c直接放在测试目录下,而是放在下一级子目录src下。一般开源软件的源码都这么设置。那么应该如何处理呢?首先在hello1目录下编辑configure.ac文件,内容如下:
AC_INIT(src/hello.c)
AM_INIT_AUTOMAKE(hello, 0.1)
AC_PROG_CC
AC_OUTPUT(Makefile src/Makefile) |
其中第四行指定在执行configure脚本后的两个输出文件,即当前目录下的Makefile和src目录下的Makefile。
再编辑Makefile.am文件,内容如下:
SUBDIRS = src
它用来指定用户的工程目录中都包含哪些子目录。目前用户只有一个源程序目录src,在以后的工程中用户可以加入文档目录doc、测试目录test等。
然后在src目录中编辑Makefile.am文件,内容如下:
bin_PROGRAMS = hello
hello_SOURCES = hello.c |
编辑完成,确认无误后,在工程目录中依次执行“aclocal”、“autoconf”和“automake --add-missing --foreign -copy”命令,至此用户已经完成了此工程的创建。执行“./configure”来生成Makefile文件。最后执行“make”命令在src目录中生成可执行文件hello。
多个输出结果
如果源程序代码有两个C源文件在同一个目录假定为hello2里面,并且输出两个可执行文件,那么这种情况应该如何处理呢?
首先进入hello2子目录,像上面的例子那样,创建源代码目录src。在src目录下编辑两个C源程序hello.c和oh.c。下一步在目录hello2中编辑configure.ac文件,内容如下:
AC_INIT(src/hello.c)
AM_INIT_AUTOMAKE(hello, 0.2)
AC_PROG_CC
AC_OUTPUT(Makefile src/Makefile) |
与hello1工程中的configure.ac的内容相仿,不同的是这次的版本变了。
再编辑Makefile.am文件,这里与hello1工程的一模一样。需要指出的是src目录下的Makefile.am文件要做出改动,内容如下:
bin_PROGRAMS = hello oh
hello_SOURCES = hello.c
oh_SOURCES = oh.c |
需要注意的是多个输出结果在bin_PROGRAMS后指出就可以了。但每个可执行文件都要指定源代码文件,hello对应的源代码为hello.c,oh对应的源代码为oh.c。
编辑完相关配置文件后,就可以依次执行“aclocal”、“autoconf”和“automake”了。
打包方式
用户正常用的源程序代码打包后,文件名的后缀是.tar.gz。这是最常用的打包方式。但它的压缩率并不是最高的。压缩率更好的压缩方式是采用bz2格式。前提是保证用户的系统安装有bzip2压缩工具。
将hello2工程的源码复制到本工程目录的src目录下,在工程目录中编辑Configure.ac文件,内容和hello2中的Configure.ac一样。
在工程目录中的Makefile.am文件内容如下:
AUTOMAKE_OPTIONS = dist-bzip2
SUBDIRS = src |
子目录中的Makefile.am文件内容与上一工程中的完全相同。再执行“aclocal”等相关命令创建工程,接着在用“make”编译完成后,可以用“make dist”来打包,最后会在工程目录下出现两个压缩包hello-0.2.tar.gz和hello-0.2.tar.bz2。