相信每个学习Linux的人都知道Makefile,这是一个很有用的东西,但是编写它是比较复杂,今天介绍一个它的自动生成工具,autotools的使用。很多GNULinux的的软件都是用它生成Makefile的,包括我们非常熟悉的Linux内核源代码。

1、准备:

需要工具

autoscan

aclocal

autoheader

automake

autoconf

auto make

在终端敲入命令,哪个没有安装哪个,一般是第一个autoscan没有,其它的我用的Ubuntu10.04下全部都有

2、测试程序编写:
     建立目录:mkdir include src

编写程序:include/str.h

  1. #include <stdio.h>
  2. int str(char *string);

编写程序:src/str.c

  1. #include "str.h"
  2. //print string
  3. int str(char *string){
  4. printf("\n----PRINT STRING----\n\"%s\"\n",string);
  5. return 0;
  6. }
  7. //interface of this program
  8. int main(int argc , char **argv){
  9. char str_read[1024];
  10. printf("Please INPUT something end by [ENTER]\n");
  11. scanf("%s",str_read);
  12. return str(str_read );
  13. }

3、生成configure.ac

configure.ac是automake的输入文件,所以必须先生成该文件。
    执行命令:

  1. [root@localhost str]# ls
  2. include  src
  3. [root@localhost str]# autoscan
  4. autom4te: configure.ac: no such file or directory
  5. autoscan: /usr/bin/autom4te failed with exit status: 1
  6. [root@localhost str]# ls
  7. autoscan.log  configure.scan  include  src
  8. [root@localhost str]# cp configure.scan configure.ac

修改 configure.ac

  1. #                                               -*- Autoconf -*-
  2. # Process this file with autoconf to produce a configure script.
  3. AC_PREREQ(2.59)
  4. AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
  5. AC_CONFIG_SRCDIR([include/str.h])
  6. AC_CONFIG_HEADER([config.h])
  7. # Checks for programs.
  8. AC_PROG_CC
  9. # Checks for libraries.
  10. # Checks for header files.
  11. # Checks for typedefs, structures, and compiler characteristics.
  12. # Checks for library functions.
  13. AC_OUTPUT

修改

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

改为:

  1. AC_INIT(str,0.0.1, [bug@sounos.org])

其中:FULL-PACKAGE-NAME 为程序名称,VERSION为当前版本, BUG-REPORT-ADDRESS为bug汇报地址

然后添加两句话:

AM_INIT_AUTOMAKE
    AC_CONFIG_FILES([Makefile])

结果如下:(两句话不是在一起的)

  1. #                                               -*- Autoconf -*-
  2. # Process this file with autoconf to produce a configure script.
  3. AC_PREREQ(2.59)
  4. #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
  5. AC_INIT(str, 0.0.1, [bug@sounos.org])
  6. AM_INIT_AUTOMAKE
  7. AC_CONFIG_SRCDIR([include/str.h])
  8. AC_CONFIG_HEADER([config.h])
  9. # Checks for programs.
  10. AC_PROG_CC
  11. # Checks for libraries.
  12. # Checks for header files.
  13. # Checks for typedefs, structures, and compiler characteristics.
  14. # Checks for library functions.
  15. AC_CONFIG_FILES([Makefile])
  16. AC_OUTPUT

4、执行aclocal

  1. [root@localhost str]# aclocal
  2. /usr/share/aclocal/libfame.m4:6: warning: underquoted definition of AM_PATH_LIBFAME
  3. run info '(automake)Extending aclocal'
  4. or see http://sources.redhat.com/automake/automake.html#Extending-aclocal

5、制作Makefile.am

  1. [root@localhost str]# vi Makefile.am
  2. #Makefile.am
  3. bin_PROGRAMS    = str
  4. str_SOURCES     = include/str.h src/str.c
  5. str_CPPFLAGS    = -I include/

automake 这个命令需要用到这个配置文件。各个选项意思比较直观,不多说。

6、autoheader

  1. [root@localhost str]# autoheader

7、automake必须文件:

  1. *  install-sh
  2. * missing
  3. * INSTALL
  4. * NEWS
  5. * README
  6. * AUTHORS
  7. * ChangeLog
  8. * COPYING
  9. * depcomp

其中,以下文件在执行automake -a的时候会自动生成

  1. * install-sh
  2. * missing
  3. * INSTALL
  4. * COPYING
  5. * depcomp

所以,接下来手动生成剩下的文件

  1. [root@localhost str]# touch NEWS README AUTHORS ChangeLog

8、执行automake -a

  1. [root@localhost str]# automake -a
  2. configure.ac: installing `./install-sh'
  3. configure.ac: installing `./missing'
  4. Makefile.am: installing `./INSTALL'
  5. Makefile.am: installing `./COPYING'
  6. Makefile.am: installing `./compile'
  7. Makefile.am: installing `./depcomp'

9、autoconf

  1. [root@localhost str]# autoconf
  2. [root@localhost str]# ls
  3. aclocal.m4      autoscan.log  config.h.in   configure.scan  include     Makefile.am  NEWS
  4. AUTHORS         ChangeLog     configure     COPYING         INSTALL     Makefile.in  README
  5. autom4te.cache  compile       configure.ac  depcomp         install-sh  missing      src

10、执行测试:
      执行./configure

  1. [root@localhost str]# ./configure --prefix=/u
  2. checking for a BSD-compatible install... /usr/bin/install -c
  3. checking whether build environment is sane... yes
  4. checking for gawk... gawk
  5. checking whether make sets $(MAKE)... yes
  6. checking for gcc... gcc
  7. checking for C compiler default output file name... a.out
  8. checking whether the C compiler works... yes
  9. checking whether we are cross compiling... no
  10. checking for suffix of executables...
  11. checking for suffix of object files... o
  12. checking whether we are using the GNU C compiler... yes
  13. checking whether gcc accepts -g... yes
  14. checking for gcc option to accept ANSI C... none needed
  15. checking for style of include used by make... GNU
  16. checking dependency style of gcc... gcc3
  17. configure: creating ./config.status
  18. config.status: creating Makefile
  19. config.status: creating config.h
  20. config.status: config.h is unchanged
  21. config.status: executing depfiles commands

执行 make

  1. [root@localhost str]# make
  2. make  all-am
  3. make[1]: Entering directory `/data/devel/c/str'
  4. if gcc -DHAVE_CONFIG_H -I. -I. -I.  -I include/   -g -O2 -MT str-str.o -MD -MP -MF ".deps/str-str.Tpo" -c -o str-str.o `test -f 'src/str.c' || echo './'`src/str.c; \
  5. then mv -f ".deps/str-str.Tpo" ".deps/str-str.Po"; else rm -f ".deps/str-str.Tpo"; exit 1; fi
  6. gcc  -g -O2   -o str  str-str.o
  7. make[1]: Leaving directory `/data/devel/c/str'

此时已经生成了 str(可执行文件名字在前面设置Makefile.am的参数时候去顶)这个,可以通过./str直接看到运行结果

  1. [root@localhost str]# ./str
  2. Please INPUT something end by [ENTER]
  3. abcksdhfklsdklfdjlkfd
  4. ----PRINT STRING----
  5. "abcksdhfklsdklfdjlkfd"

不过这里我们都做一步,把它安装到系统里面,这样我们只要在终端输入str就可以运行程序了。

执行 make install:

  1. [root@localhost str]# make install
  2. make[1]: Entering directory `/data/devel/c/str'
  3. test -z "/u/bin" || mkdir -p -- "/u/bin"
  4. /usr/bin/install -c 'str' '/u/bin/str'
  5. make[1]: Nothing to be done for `install-data-am'.
  6. make[1]: Leaving directory `/data/devel/c/str'

接下来你可以make clean 清除安装的那些.o 文件了。

这样生成了一个自动的Makefile。

Makefile自动生成工具-----autotools的使用(详细)的更多相关文章

  1. C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!

      序     在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现 ...

  2. Makefile自动生成头文件依赖

    前言 Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖 ...

  3. h5自动生成工具

    一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手 ...

  4. 代码自动生成工具MyGeneration之一(程序员必备工具)

    代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...

  5. Linux Makefile自动生成--config.h

    Linux Makefile自动生成--config.h http://blog.csdn.net/spch2008/article/details/12510805

  6. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

    Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...

  7. springboot成神之——swagger文档自动生成工具

    本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...

  8. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  9. C# 代码自动生成工具

    开源:C# 代码自动生成工具,支持站点前后台   前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...

随机推荐

  1. 已经上架的app(可供销售)在AppStore上搜不到的解决办法

    这两天很是头大, 因为3天前手动发布的app到现在都还没在AppStore上看到,打了无数电话给苹果和发邮件给review团队. 下面说说怎么解决我们在iTunes后台看到是绿灯(可供销售)但是就是在 ...

  2. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )

    一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...

  3. 面向对象程序设计-C++ Type conversion (Static) & Inheritance & Composition【第十二次上课笔记】

    这节课继续讲解了 static 作为静态数据成员 / 成员函数的用法 具体详解我都已注释出来了,大家可以慢慢看 有任何问题都可以在这篇文章下留言我会及时解答 :) //static 静态数据成员 // ...

  4. Ural 1086 - Cryptography

    While preparing this problem set the jury has run into the following problem: it was necessary to se ...

  5. ios 判断,qq,银行卡,手机号,邮编,生日,数字,字符串,护照, email

    http://blog.csdn.net/dyllove98/article/details/8635079 IdentifierValidator.h // //  IdentifierValida ...

  6. Webgrid参数格式

    显示图片 grid.Column(null,"图片",format:p=>Html.Raw(string.Format("<img src='{0}'/> ...

  7. (step7.2.3)hdu 2554(N对数的排列问题——简单数论)

    题目大意:输入一个整数n,表示有n对整数.判断能否出现一种情况就是2个1之间有1个数,2个2之间有2个数..... 解题思路: 准备知识: ①n对数,共2*n个数.所以要有2*n个位置来放置这2*n个 ...

  8. wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wx ...

  9. ASP.NET Excel导入到SQL Server数据库

    本文转自:http://www.cnblogs.com/lhking/archive/2009/06/08/1499002.html 提供把Excel里的数据导入到SQL Server 数据库,前提是 ...

  10. 如何搭建Visual Studio的内核编程开发环境

    最近正在看<寒江独钓——Windows内核安全编程>这本书,感觉这本书非常好,有兴趣的朋友可以买来看看,有关这本书的信息请参考:http://www.china-pub.com/19559 ...