autotool工具简介
2014-01-15
开源软件的安装一般都分三步,
./configure
make
make install
本文以一个例子来简单说明一下如何使用autotool工具来简化程序的编译安装。 执行./configure时,检查编译该程序所需要的条件是否存在,并且将(*.in)文件转化为最终文件(Makefile,config.h…)。当./configure成功后,就生成Makefile了。执行make之后,程序进行编译,之后使用make install进行安装。关于autotool的理论就不赘述了,网上随处都能找到,我只是简单记录一下过程。整个软件的发布如图所示:
我们来创建一个最简单的helloworld工程,目录结构如下。
helloworld
|
|--include
| --hello.hxx world.hxx
|
|--lib
| |--hello.cxx world.cxx
| --Makefile.am
|
|--src
| |--main.cxx
| --Makefile.am
|
|--Makefile.am
|--README, NEWS, ChangeLog, AUTHORS
-
我们先创建如上所示的目录结构,使用脚本如下:
mkdir helloworld cd helloworld mkdir include cd include touch hello.hxx world.hxx cd .. mkdir lib cd lib touch hello.cxx world.cxx Makefile.am cd .. mkdir src cd src touch main.cxx Makefile.am cd .. touch NEWS README ChangeLog AUTHORS Makefile.am
-
各个文件如下内容:
//main.cxx #include "hello.hxx" #include "world.hxx" #include "config.h" // make configure results available int main() { hello first_word; world second_word; std::cout<<PACKAGE_STRING; /* use the preprocessor definitions from config.h */ first_word.print(); second_word.print(); return 0; } //hello.hxx #include <iostream> #ifndef HELLO_HXX #define HELLO_HXX class hello{ public: void print(); }; #endif //hello.cxx #include "hello.hxx" void hello::print() { std::cout<<" Hello "; }
world的内容跟hello一样,将hello.hxx和hello.cxx中的“hello”换成“world”即可。
-
执行autoscan生成一个configure.scan,这是一个模板,我们将其名字改为configure.ac。修改成一下内容:
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.68]) AC_INIT(helloworld, 0.01, liq3ea@163.com) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([include/hello.hxx]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CXX AC_PROG_RANLIB # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([Makefile lib/Makefile src/Makefile]) AC_OUTPUT
-
填写各个目录的Makefile.am:
helloworld/Makefile.am: SUBDIRS=lib src helloworld/lib/Makefile.am: noinst_LIBRARIES=libhw.a ## static library which is not to be installed libhw_a_SOURCES=hello.cxx hello.hxx world.cxx world.hxx libhw_a_CXXFLAGS=-I../include ## add path to headerfiles helloworld/src/Makefile.am: bin_PROGRAMS=helloworld helloworld_SOURCES=main.cxx helloworld_CXXFLAGS= -I../include ## add path to headerfiles helloworld_LDADD=../lib/libhw.a ## link with static library
-
接下来执行aclocal autoconf autoheader 命令,然后执行 automake -a 。至此所有该有的文件都有了。
-
执行./configure可以看到检测条件过程,执行make编程程序,sudo make install 安装。
blog comments powered by Disqus