简单工程Makefile的自动生成

转载 2015年11月20日 15:56:13

 工程Makefile的编写,可以自己动手来写,也可以使用automake等工具来自动生成。下面还是以sort工程为例,对自动生成Makefle进行示例说明。

预备知识:
    运用GNU Autoconf 及 Automake 这两套工具,可以自动生成Makefile文件,并且让开发出来的软件可以像大多数源码包那样,只需"./configure", "make","make install" 就可以把程序安装到系统中。
    autoconf是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,其中autoconf需要用到 m4,便于生成脚本。
    automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成 Makefile.in, automake还需用到perl。
    工程sort,Makefile的生成,需要以下几步:
1) 运行autoscan命令
2) 将configure.scan 更名为configure.in,并修改configure.in文件
3) 在sort根目录下新建Makefile.am文件,并在各个模块子目录下也新建makefile.am文件
4) 在sort根目录下新建NEWS、 README、 ChangeLog 、AUTHORS文件  
5) 运行aclocal命令
6) 运行autoconf命令
7) 运行automake -a命令
8) 运行./confiugre,生成Makefile

准备工作:
    安装automake。自动生成Makefile,需要编译环境安装有autoconf和automake,若没有安装,在ubuntu下可以这样来安装:

root@mygirl:/study/sort# apt-get install automake


源文件:
    本例工程,实现几种排序算法的具体代码实现和性能比较。工程原始文件结构如下:
sort
|-- main
|   |-- include
|   |   |-- heap_sort.h
|   |   |-- quick_sort.h
|   |   `-- shell_sort.h
|   |-- libs
|   `-- src
|       `-- sort.c
|-- heap_sort
|   |-- include
|   `-- src
|       `-- heap_sort.c
|-- quick_sort
|   |-- include
|   `-- src
|       `-- quick_sort.c
`-- shell_sort
    |-- include
    `-- src
        `-- shell_sort.c

Let's do it!
    首先进入sort根目录,状态如下:

root@mygirl:/study/sort# ls
heap_sort  main  quick_sort  shell_sort


    运行autoscan

root@mygirl:/study/sort# autoscan
root@mygirl:/study/sort# ls
autoscan.log  configure.scan  heap_sort  main  quick_sort  shell_sort


    可以看到,文件夹下多出了两个文件:autoscan.log,configure.scan。之后,我们需要将configure.scan更名为configure.in,并进行更改:

root@mygirl:/study/sort# mv configure.scan configure.in root@mygirl:/study/sort# vim configrue.in


    更改后的文件,内容如下:


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

AC_PREREQ(2.61)
AC_INIT(sort, 1.0, jiangpeifu@gmail.com)
AC_CONFIG_SRCDIR([heap_sort/src/heap_sort.c])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE(sort,1.0)

# Checks for programs.
AC_PROG_CC

# Checks for libraries.
AC_PROG_RANLIB+=RANLIB

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_TIME

# Checks for library functions.
AC_CHECK_FUNCS([gettimeofday])

AC_OUTPUT([Makefile
           heap_sort/Makefile
           quick_sort/Makefile
           shell_sort/Makefile
           main/Makefile
           ])


    文件中,红色的为改动的内容。

    在根目录下添加Makefile.am 文件:

root@mygirl:/study/sort# vim Makefile.am


    Makefile.am的内容如下:


SUBDIRS=quick_sort heap_sort shell_sort main
INCLUDES=-I./include 
export INCLUDES



   在main目录下添加Makefile.am 文件:

root@mygirl:/study/sort# cd main
root@mygirl:/study/sort/main# vim Makefile.am


    Makefile.am的内容如下:


noinst_PROGRAMS=sort
INCLUDES=-I./include
sort_SOURCES=./src/sort.c
sort_LDADD=$(top_srcdir)/heap_sort/libheap_sort.a /
           $(top_srcdir)/shell_sort/libshell_sort.a /
           $(top_srcdir)/quick_sort/libquick_sort.a



   在heap_sort目录下添加Makefile.am 文件:

root@mygirl:/study/sort# cd heap_sort
root@mygirl:/study/sort/heap_sort# vim Makefile.am


    Makefile.am的内容如下:


INCLUDES=-I./include
noinst_LIBRARIES=libheap_sort.a
libheap_sort_a_SOURCES=./src/heap_sort.c



   在quick_sort目录下添加Makefile.am 文件:

root@mygirl:/study/sort# cd quick_sort
root@mygirl:/study/sort/quick_sort# vim Makefile.am


    Makefile.am的内容如下:


INCLUDES=-I./include
noinst_LIBRARIES=libquick_sort.a
libquick_sort_a_SOURCES=./src/quick_sort.c



   在shell_sort目录下添加Makefile.am 文件:

root@mygirl:/study/sort# cd shell_sort
root@mygirl:/study/sort/shell_sort# vim Makefile.am


    Makefile.am的内容如下:


INCLUDES=-I./include
noinst_LIBRARIES=libshell_sort.a
libshell_sort_a_SOURCES=./src/shell_sort.c



    在根目录下添加如下文件:NEWS,README,ChangeLog,AUTHORS,config.h.in

root@mygirl:/study/sort# touch NEWS README ChangeLog AUTHORS config.h.in

    这些文件的内容可以自己编写,我们这里文件内容均为空。

    运行aclocal,和autoconf命令:

root@mygirl:/study/sort# aclocal
root@mygirl:/study/sort# autoconf


    运行automake -a:

root@mygirl:/study/sort# automake -a
root@mygirl:/study/sort# ls
aclocal.m4  autom4te.cache  ChangeLog    configure     COPYING  heap_sort  install-sh  Makefile.am  missing  quick_sort  shell_sort
AUTHORS     autoscan.log    config.h.in  configure.in  depcomp  INSTALL    main        Makefile.in  NEWS     README


    看到,根目录下多生成文件Makefile.in。在子模块main等目录下也生成了Makefile.in。

    运行./configure:

root@mygirl:/study/sort# ./configure
root@mygirl:/study/sort# ls
aclocal.m4      autoscan.log  config.h.in    configure     depcomp    install-sh  Makefile.am  NEWS        shell_sort
AUTHORS         ChangeLog     config.log     configure.in  heap_sort  main        Makefile.in  quick_sort  stamp-h1
autom4te.cache  config.h      config.status  COPYING       INSTALL    Makefile    missing      README


    这样就生成了工程sort的Makefile。
    在根目录下运行make,可以编译工程;运行make install可以安装编译的文件;运行make dist,可以生成源码压缩包。

至此一切OK!!

http://blog.csdn.net/yf210yf/article/details/7638550


相关文章推荐

一个简单的执行程序的GNU automake自动生成Makefile的方法及案例

全GNU的世界里,存在Automake这样的工具进行自动生成Makefile文件,automake是由Perl语言编写的,必须与GNU autoconf一并使用,具体的生成过程请参看GNU autom...

自动生成_Makefile_的全过程详解

  • 2013年03月29日 10:57
  • 100KB
  • 下载

linux自动生成makefile

  • 2015年07月06日 09:36
  • 292KB
  • 下载

如何自动生成Makefile

如何自动生成Makefile 如果只是一个很小的程序,没有几个文件,那么,我们手工书写Makefile还是可以忍受的,如果是一个超大型的工程,谁能忍受的了,光一个Makefile文件就足以是Wr...

自动生成makefile 最好的教程

  • 2013年12月21日 20:13
  • 75KB
  • 下载

bash shell自动生成Makefile

  • 2013年05月07日 22:50
  • 2KB
  • 下载

makefile自动生成依赖性

在Makefile中,我们的依赖关系可能会需要包含一系列的头文件,比如,如果我们的main.c中有一句“#include "defs.h"”,那么我们的依赖关系应该是: main.o : main....

自动生成Linux下Makefile全攻略

http://blog.csdn.net/lovetangtang/article/details/569879   作为Linux下的程序开发人员,大家一定都遇到过Makefile,用mak...
  • seucbh
  • seucbh
  • 2013年08月29日 18:11
  • 732

autotools自动生成Makefile与打包

对于一个较大的项目而言,完全手动建立 Makefile是一件费力而又容易出错的工作。autotools系列工具只需用户输入简单的目标文件、依赖文件、文件目录等就可以比较轻松地生成 Makefile...
  • WDelBoy
  • WDelBoy
  • 2011年04月04日 23:58
  • 324

Makefile 文件自动生成方法

分类: LINUX        在本文中,将给大家介绍如何使用 autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单工程Makefile的自动生成
举报原因:
原因补充:

(最多只允许输入30个字)