Autotools快速开发

程序开发需要注意的细节很多,不仅需要用户有良好的技术,而且还需要开发利器帮助用户化难为易。在此介绍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。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值