Makefile自动生成工具-----autotools的使用(详细)

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

1、准备:

需要工具

autoscan

aclocal

autoheader

automake

autoconf

auto make

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

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

编写程序:include/str.h

[cpp] view plaincopy

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

编写程序:src/str.c

[cpp] view plaincopy

  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的输入文件,所以必须先生成该文件。
    执行命令:

[cpp] view plaincopy

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

修改 configure.ac

[cpp] view plaincopy

  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

修改

[cpp] view plaincopy

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

改为:

[cpp] view plaincopy

  1. AC_INIT(str,0.0.1, [[email protected]])

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

然后添加两句话:

AM_INIT_AUTOMAKE
    AC_CONFIG_FILES([Makefile])

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

[cpp] view plaincopy

  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, [[email protected]])
  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

[cpp] view plaincopy

  1. [[email protected] 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

[cpp] view plaincopy

  1. [[email protected] 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

[cpp] view plaincopy

  1. [[email protected] str]# autoheader

7、automake必须文件:

[cpp] view plaincopy

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

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

[cpp] view plaincopy

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

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

[cpp] view plaincopy

  1. [[email protected] str]# touch NEWS README AUTHORS ChangeLog

8、执行automake -a

[cpp] view plaincopy

  1. [[email protected] 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

[cpp] view plaincopy

  1. [[email protected] str]# autoconf
  2. [[email protected] 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

[cpp] view plaincopy

  1. [[email protected] 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

[cpp] view plaincopy

  1. [[email protected] 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直接看到运行结果

[cpp] view plaincopy

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

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

执行 make install:

[cpp] view plaincopy

  1. [[email protected] 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的使用(详细)

时间: 2024-10-25 08:44:37

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

linux 商业项目 makefile 自动生成工具Autotools的使用

我们在平时的学习中要编译我们写的源代码生成可执行文件,大家都知道用gcc编译工具就可以完成任务,更复杂一点的,如果我们编写的文件比较多,那单纯在linux环境下写gcc命令进行编译就显得有点效率太低了,这时我们肯定想到写一个makefile来完成这样稍微复杂的编译过程,我想很多人也确实是是这样做的,所以我们回去学习makefile 的语法,其实如果编译 的文件量再多一些,文件之间的依赖关系更复杂一些,那么我们编写一个正确的,效率高的makefile也不是一件很容易的事情吧.其实我之前是有体验过这

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

序 在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现很难做到,只发现有个类似的智能生成工具autotools,但是操作比较麻烦,奔着“一人学习,大家共享”的原则,手动写了一个工具类,帮助自己和大家生成现成的c或者cpp框架. 代码比较简单,希望我们能一起改善下. git路径:https://github.com/chuanshanjia/ccpp/blob/ma

Makefile自动生成头文件依赖

前言 Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖. CC = gcc CFLAGS = -Wall -O INCLUDEFLAGS = LDFLAGS = OBJS = seq.o TARGETS = test_seq .PHONY:all all : $(TARGETS) test_seq:test_seq.o $(OBJS) $(CC) -o

STM32代码自动生成工具使用说明

1.什么是"代码自动生成工具" 为了降低开发者的开发门槛,缩短开发周期,降低开发资源投入,机智云推出了代码自动生成服务.云端会根据产品定义的数据点生成对应产品的设备端代码. 自动生成的代码实现了机智云通信协议的解析与封包.传感器数据与通信数据的转换逻辑,并封装成了简单的API,且提供了多种平台的实例代码.当设备收到云端或APP端的数据后,程序会将数据转换成对应的事件并通知到应用层,开发者只需要在对应的事件处理逻辑中添加传感器的控制函数,就可以完成产品的开发. 使用自动生成的代码开发产品

h5自动生成工具

一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手了.在此也要感谢我周围的小伙伴.是波波同学告诉了我如何使用ps中的脚本批量把图层导出成图片,嘉哥告诉了我怎么裁剪png图片.站在了巨人肩膀上的我,利用这两个方法和我自己的聪明才智,经过2/3天的努力,终于完成了我的工具.个人感觉非常满意. 二.规范说明 设计稿要求为640x1006尺寸,设计人员给的

代码自动生成工具,2小时搞定智能硬件产品Demo

常见的智能硬件设备多是由单片机.微处理器.微控制器等构成的嵌入式系统,通过WIFI.蓝牙.GPRS等无线通信技术连接云服务器,传统的开发方式需要开发人员根据自己的产品功能完成MCU 通过无线通信/芯片模组与云服务器交互的协议,而通过MCU代码自动生成工具,云端会根据产品定义的数据点生成对应产品的设备端代码.使用自动生成的代码开发产品,就不必再处理协议相关的部分,开发者可以将节省出来的精力集中在产品的核心功能开发上,不必重复"造轮子". 使用MCU.手机APP代码自动生成工具,2小时搞定

iBatis 代码自动生成工具 iBator 及 Example 使用

iBator的下载和安装 官方下载地址:http://people.apache.org/builds/ibatis/ibator/ 安装:见<Eclipse 插件安装> 安装完成后,“File” —> "New" —> "Other..." iBatis 代码自动生成工具 iBator - 低调的华丽 - 辉色空间 选择项目名 —> "New" —> "Other..." —> “N

页面自动生成工具设计

页面自动生成工具设计 1功能概述 1.1使用术语 页面自动生成工具:自定义查询条件以及数据显示的一种页面生成工具 1.2功能说明 页面自动生成工具是按照工程人员的需求定义查询条件以及数据显示方式的一种工具,数据显示可以用表格和图表的方式:查询统计以表格的方式显示数据,趋势页面以图表方式显示页面. 1.2.1查询统计页面 查询统计页面的设置如下图: "设置数据集":整个查询统计显示数据的完整sql语句. "查询条件设置":写完sql语句后点击"设置查询条件&

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

Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffolding结合Generic Unit of Work & (Extensible) Repositories Framework代码生成向导> 是生存Web Form的. 这次看到网上有生成MVC Saffolding扩展原作者的代码 https://github.com/robinli/MVC5-