自动生成Linux下Makefile全攻略(上)

作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。

  在本文中,将给大家介绍如何使用 autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make install”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。

  1.准备好程序 main.c

   main.c

   #include <stdio.h>

   int main()

  {

      print("hello!");

      return 0;

   }

  2.准备好脚本 autogen.sh  

   autogen.sh

    #!/bin/sh

    aclocal

    autoheader

    automake --add-missing

    autoconf

  3.运行autoscan 生成configure.scan

  4.mv configure.scan configure.ac

  5.在configure.ac 中修改

  AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

  为 AC_INIT(hello, 0.0.1, ubuntu.yonsan@gmail.com)
  并添加 AM_INIT_AUTOMAKE 
AC_CONFIG_FILES([Makefile])

 configure.ac

  # -*- Autoconf -*-

  # Process this file with autoconf to produce a configure script.

  AC_PREREQ(2.59)

  #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

  AC_INIT(hello, 0.0.1, ubuntu.yonsan@gmail.com)

  AC_CONFIG_SRCDIR([main.c])

  AM_CONFIG_HEADER([config.h])

  AM_INIT_AUTOMAKE

  # Checks for programs.

  AC_PROG_CC

  # Checks for libraries.

  # Checks for header files.

  # Checks for typedefs, structures, and compiler characteristics.

  # Checks for library functions.

  AC_FUNC_MALLOC

  AC_CONFIG_FILES([Makefile])

  AC_OUTPUT

 6.准备好Makefile.am

 Makefile.am

  AUTOMAKE_OPTIONS = foreign

  bin_PROGRAMS = hello

  hello_SOURCES = main.c

  #noinst_HEADERS =

 7.运行autogen.sh    哼哼, 自动生成了makefile ! 

以上文件放在同一目录下, 运行./autogen.sh && ./configure && make && ./test

利用 configure 所产生的 Makefile文件有几个预先设定的目标可供使用,这里只用几个简述如下:

  make all

  产生设定的目标,既范例中的可执行文件。只敲入make 也可以,此时会开始编译源代码,然后连接并产生执行文件。

  make clean

  清除之前所编译的可执行文件及目标文件(object file, *.o)。

  make distclean

  除了清除可执行文件和目标文件以外,也把 configure 所产生的 Makefile 清除掉。 通常在发布软件前执行该命令。

  make install

  将程序安装到系统中,若源码编译成功,且执行结果正确,便可以把程序安装到系统预先设定的执行文件存放路径中,若用 bin_PROGRAMS 宏的话,程序会被安装到 /usr/local/bin下。

  make dist

  将程序和相关的文档包装为一个压缩文档以供发布 (distribution) 。执行完在目录下会产生一个以 PACKAGE-VERSION.tar.gz 为名称的文件!

  make distcheck

  和 make dist 类似,但是加入检查包装以后的压缩文件是否正常,这个目标除了把程序和相关文档包装成 tar.gz 文件外,还会自动把这个压缩文件解开,执行 configure,并执行 make all ,确认编译无错误以后,方显示这个 tar.gz 文件已经准备好并可以发布了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值