参考网上的文章,试了一下程序自动构建工具,目的是要编译一个动态库/静态库。
测试环境:
ubuntu 12.04 X86-64
autoscan (GNU Autoconf) 2.68
autoheader (GNU Autoconf) 2.68
autoconf (GNU Autoconf) 2.68
aclocal (GNU automake) 1.11.3
automake (GNU automake) 1.11.3
libtoolize (GNU libtool) 2.4.2
1. 新建一个工程,目录结构如下(这些文件是要自己动手编写的,Makefile.am后面会有例子;AUTHORS/ChangeLog/NEWS/README是几个标准文件,内容可以留空):
project
├── AUTHORS2.安装自动构建工具(某些工具是安装ubuntu的时候就已经自动安装上的)
sudo apt-get install autoconf automake libtool make gcc
3. 编写Makefile.am
Makefile.am
AUTOMAKE_OPTIONS=foreign SUBDIRS=src
AUTOMAKE_OPTIONS=foreign lib_LTLIBRARIES=libcpuinfo.la libcpuinfo_la_SOURCES=cpuinfo.c include_HEADERS=cpuinfo.h
4. 在工程目录下执行autoscan,目录下会生成autoscan.log和configure.scan。把configure.scan名称改为configure.ac
5. 修改configure.ac内容,如下:
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.68]) AC_INIT([libcpuinfo], [1.0.0], [[email protected]]) AC_CONFIG_SRCDIR([src/cpuinfo.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE # Checks for programs. AC_PROG_CC AC_PROG_LIBTOOL # Checks for libraries. # Checks for header files. AC_CHECK_HEADERS([fcntl.h]) # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT([Makefile src/Makefile])
6. 依次执行以下命令:
aclocal
autoheader
libtoolize --automake --copy --force
automake –-add-missing
autoconfig
至此,configure就已经生成了
7. 生成Makefile && 编译
./configure --prefix=$(pwd)/output
make
make install
顺利的话,此时在output目录下就会生成include和lib两个目录,里面包含了头文件cpuinfo.h和两个库libcpuinfo.so/libcpuinfo.a。
configure.ac每个项的意思暂时没搞懂,先用起来,再深入学习。
附参考文章:
http://www.ibm.com/developerworks/cn/linux/l-makefile/index.html
http://www.gnu.org/software/autoconf/manual/autoconf-2.68/html_node/index.html