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 |
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 |
l 测试一下
[root@linux helloworld]# ./autogen.sh ;make;make install
OK了
相关文章推荐
- Autoconf/automake step by step
- Autoconf/automake step by step
- Autoconf/automake step by step
- automake detail step by step
- No rule to make target `include/config/auto.conf', needed by `include/ config/kernel.release'. stop
- Simple guide for Automake/Autoconf by Nick
- 在mac os 中安装 autoconf and automake
- Linux下使用automake autoconf autoscan aclocal简单介绍
- 大型项目使用Automake/Autoconf完成编译配置
- 大型项目使用Automake/Autoconf完成编译配置(1)——提纲挈领
- automake/autoconf 入门
- GNU Automake By Example
- 解决Mac OS X10.12下 Error watching file for changes: EMFILE及`brew link autoconf automake`错误
- autoconf/automake工具包
- 自动生存Makefile教程 autoscan aclocal autoconf autoheader automake configure
- 自动生成 Makefile 的全过程详解! automake/autoconf 入门(转)
- 自动生成Makefile的全过程详解!automake/autoconf入门
- 大型项目使用Automake/Autoconf完成编译配置(标准的编译过程已经变成了简单的三部曲:configure/make/make install,)
- 大型项目使用Automake/Autoconf完成编译配置(2)——步步为营
- 大型项目使用Automake/Autoconf完成编译配置