Autoconf/automake step by step

原创 2006年06月12日 21:05:00

Autoconf/automake step by step

 

Autoconf/automake 在开源社区里,它的重要性可以说不下于gcc,目前除了Xfree86外,几乎所有的开源项目都使用Autoconf/automake,甚至Xfree86的开发人员已经计划抛弃imake,而采用Autoconf/automake作为工程管理工具了。

 

Autoconf/automake冗长的手册让我犯晕。虽然我曾耐着性子浏览过一遍,但是决大部分内容,在日常工作根本用不上。加上建立工程的机会并不多,等到下一次要建立时,上次学到的知识早忘光了,还得去看手册,真是麻烦。

 

大多数时候,我更需要的是step by step的指南,只有在特殊情况下,要使用Autoconf/automake的高级功能时候,我才愿意去查手册。最近刚好建过几个工程,记个笔记吧,以便下次查阅。

 

一、建立可执行文件工程。

l         前提:

项目目录:helloworld

源文  件:helloworld/src/helloworld.c

 

l         autoscan产生configure.in的框架:

[root@linux helloworld]# autoscan

[root@linux helloworld]# mv configure.scan configure.in

 

打开configure.in,我们可以看到:

#                                               -*- 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_CONFIG_SRCDIR([src/helloworld.c])

AC_CONFIG_HEADER([config.h])

 

# 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_OUTPUT

这个文件并不能直接使用,要做几处修改才行。

AC_INIT的参数要换成实际的参数。

AC_OUTPUT中要指明实际要生成的文件。

增加automake的初始化宏。

我们把它修改为:

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

 

AC_PREREQ(2.59)

AC_INIT(helloworld, 0.1, jim@jim.com)

AC_CONFIG_SRCDIR([src/helloworld.c])

AC_CONFIG_HEADER([config.h])

AM_INIT_AUTOMAKE(helloworld, 0.1)

 

# 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_OUTPUT([

Makefile

src/Makefile

])

 

l         建立根顶层目录中的Makefile.am,用SUBDIRS指明子目录。

SUBDIRS=src

 

l         建立src目录中的Makefile.am,这里我们生成的可执行文件名为helloworld,安装目录为${prefix}/bin。如果只想编译,不想安装到系统中,可以用noinst_PROGRAMS代替bin_PROGRAMS

bin_PROGRAMS=helloworld

helloworld_SOURCES=helloworld.c

 

l         在顶层目录中建立几个空文件。

[root@linux helloworld]# touch NEWS README ChangeLog AUTHORS

l         拷贝automake必要的文件。

[root@linux helloworld]# cp -f /usr/share/automake-1.9/depcomp .

[root@linux helloworld]# cp -f /usr/share/automake-1.9/compile .

 

l         建立autogen.sh

#!/bin/bash

aclocal

autoheader

autoconf

automake -a

./configure

[root@linux helloworld]# chmod 755 autogen.sh

l         测试一下

[root@linux helloworld]# ./autogen.sh ;make;make install

OK

 

二、建立共享库工程。

l         前提:

项目目录:helloworld

源文  件:helloworld/src/helloworld.c

头文  件:helloworld/src/helloworld.h

l         autoscan产生configure.in的框架:

[root@linux helloworld]# autoscan

[root@linux helloworld]# mv configure.scan configure.in

 

打开configure.in,我们可以看到:

#                                               -*- 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_CONFIG_SRCDIR([src/helloworld.c])

AC_CONFIG_HEADER([config.h])

 

# 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_OUTPUT

这个文件并不能直接使用,要做几处修改才行。

AC_INIT的参数要换成实际的参数。

AC_OUTPUT中要指明实际要生成的文件。

增加automake的初始化宏。

增加libtool检查。

我们把它修改为:

#                                               -*- Autoconf -*-

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

 

AC_PREREQ(2.59)

AC_INIT(helloworld, 0.1, jim@jim.com)

AC_CONFIG_SRCDIR([src/helloworld.c])

AC_CONFIG_HEADER([config.h])

AM_INIT_AUTOMAKE(helloworld, 0.1)

 

# Checks for programs.

AC_PROG_CC

AC_LIBTOOL_DLOPEN

AC_PROG_LIBTOOL

 

# Checks for libraries.

 

# Checks for header files.

 

# Checks for typedefs, structures, and compiler characteristics.

 

# Checks for library functions.

AC_OUTPUT([

Makefile

src/Makefile

])

 

l         建立根顶层目录中的Makefile.am,用SUBDIRS指明子目录。

SUBDIRS=src

 

l         建立src目录中的Makefile.am,这里我们生成的共享文件名为libhelloworld.la,安装目录为${prefix}/lib,头文件安装到${prefix}/include/helloworld/

lib_LTLIBRARIES       = libhelloworld.la

 

libhelloworld_la_SOURCES=helloworld.c

libhelloworld_la_CFLAGS=-I./

libhelloworld_la_LDFLAGS=

 

helloworldincludedir=$(includedir)/helloworld

helloworldinclude_HEADERS= helloworld.h

 

l         在顶层目录中建立几个空文件。

[root@linux helloworld]# touch NEWS README ChangeLog AUTHORS

l         拷贝automakelibtool必要的文件。

[root@linux helloworld]# cp -f /usr/share/automake-1.9/depcomp .

[root@linux helloworld]# cp -f /usr/share/automake-1.9/compile .

[root@linux helloworld]# cp -f /usr/share/libtool/ltmain.sh .

l         建立autogen.sh

#!/bin/bash

aclocal

autoheader

autoconf

automake -a

./configure

[root@linux helloworld]# chmod 755 autogen.sh

l         测试一下

[root@linux helloworld]# ./autogen.sh ;make;make install

OK

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

GYP使用技巧

转载自: http://lianliuwei.github.io/tools/2012/09/10/gyp-misc/ GYP简介 Again,这又是一个Google创造的编程工具,现在已...
  • p13503959390
  • p13503959390
  • 2017年05月28日 16:02
  • 454

cmake与autoconf+automake的对比

首先,拿他们对比本身没有太多的意义,他们都是产生makefile文件的工具。cmake产生的晚,解决了很多autotools工具的问题。autotools是一个工具集具有强大的灵活性,但是因为步骤太多...
  • cnsword
  • cnsword
  • 2012年05月07日 17:03
  • 17727

WebRTC编译篇之Ninja 编译系统 一

WebRTC已经开源五周年了,  其鼎鼎大名, 在实时多媒体通讯领域无出其右.   学习应用WebRTC的热潮,  从未消减.    要理解借鉴WebRTC中的算法或实现, 虽然未必需要了解其如何编译...
  • volvet
  • volvet
  • 2016年07月10日 10:33
  • 3098

Autoconf/automake step by step

# Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(helloworl...
  • u012451084
  • u012451084
  • 2014年01月06日 13:59
  • 181

使用Automake,Autoconf生成Makefile(Step by step)

在Unix上写过程序的人尤其是用 C 来开发程序的人一般都遇到过 Makefile,用 make 来开发和编译程序的确很方便,可是要写出一个Makefile就不那么简单了。GNU Make 那份几百页...
  • yeah2000
  • yeah2000
  • 2010年12月12日 20:30
  • 171

Autoconf/automake step by step

Autoconf/automake step by step Autoconf/automake 在开源社区里,它的重要性可以说不下于gcc,目前除了Xfree86外,几乎所有的开源项目都使用Auto...
  • absurd
  • absurd
  • 2006年06月12日 21:05
  • 7608

Build chromium(Windows)

转一篇官网上的文章 用于备忘 https://sites.google.com/a/chromium.org/dev/developers/how-tos/build-instructions-wi...
  • larryliuqing
  • larryliuqing
  • 2012年01月30日 12:41
  • 3073

automake detail step by step

1. automake Detail step by step  -) autoscan    infile: NULL outfile: -> configure.scan  -) cp confi...
  • yunccll
  • yunccll
  • 2007年09月03日 17:16
  • 695

autoconf和automake的使用

0、下载并安装autoconf和automake http://ftp.gnu.org/gnu/autoconf/ 这是目前最新的autoconf,版本是2.69: autoconf-latest...
  • zengraoli
  • zengraoli
  • 2014年02月26日 11:10
  • 13893

zmq的安装以及调试

1.前提条件是保证以下工具libtool, pkg-config, build-essential, autoconf,  automake已经安装。 2.其次是uuid-dev库安装 3.编...
  • ZXQHBD
  • ZXQHBD
  • 2017年06月01日 19:34
  • 332
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Autoconf/automake step by step
举报原因:
原因补充:

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