您的位置:首页 > 其它

Autoconf/automake step by step

2014-01-06 13:59 295 查看
# 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
])


轉自李先静的blog :http://blog.csdn.net/absurd/archive/2006/06/12/792397.aspx

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的初始化宏。

我们把它修改为:
 

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         拷贝automake和libtool必要的文件。

[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了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Makefile autoconf