一个小实例:autoconf 和 automake 生成 Makefile 文件

Makefile 文件的生成

在linux下开发大型程序时,make工具可以将大的工具分解成很多个小模块,理清各个源文件的复杂关系。然而,手工编写makefile是一项令人非常头疼的工作,耗时费力,容易出错。本文介绍如何使用自动化工具autoconf 和automake自动生成makefile文件,使得程序员开发的大型程序的编译变得十分简单,只需要“m”或者“make”命令即可。这种大型程序下载后的安装也很省力,只需要“./configure”, “make”,“make install”即可。

automake支持三种目录层次:flat、shallow和deep. flat指的是所有文件都在同一个目录中,shallow指的是主要源码在当前目录,其他部分源码在子目录,deep指的是当前目录只有配置信息,源码都分布在各个子目录中。本文先介绍最简单的情况——flat。

生成configure.in

  • 创建一个工程目录automake_test,在工程目录下创建src目录,将所有源码(例如本例是heapsort.h, heapsort.cc, main.cc)放在src中。
  • 在automaked_test目录下,执行以下命令:
    autoscan
    mv configure.scan configure.in
    touch NEWS README ChangeLog AUTHORS Makefile.am
    cd src
    touch Makefile.am
    cd ..
    cp /usr/share/automake-1.X/depcomp .
    cp /usr/share/automake-1.X/compile .

修改configure.in

原configure.in文件如下:

AC_PREREQ([2.68])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/main.cc])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CXX
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT

将其改成

AC_INIT(test, 1.0, [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/main.cc])
AM_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE(test, 1.0)

# Checks for programs.
AC_PROG_CXX
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT([Makefile
                 src/Makefile])

编辑Makefile.am文件

把automake_test下的Makefile.am内容置为

SUBDIRS = src

把src下的Makefile.am内容置为

bin_PROGRAMS = test
test_SOURCES = main.cc heapsort.h heapsort.cc

其中test是即将生成的可执行文件名。

生成makefile文件

在automake_test下运行以下命令:

aclocal
autoconf
autoheader
automake -a
./configure

运行示例程序

在src目录下,运行以下命令即可看到程序运行的结果。

make
./test

备注:在某些版本的自动化编译工具下,若有提示需要configure.ac作为automake的输入,则把configure.ac改名为configure.in,重复以上命令即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值