马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在这里你会学到更多的知识,学习linux,更要学习一种geek的精神,python之禅中也说过:以总结分享为荣,以跪求其解为耻;
引子 不管是在Linux仍是在Unix情况中,make都是一个十分主要的编译命令。不论是本人举行项目开辟仍是安装使用软件,我们都常常要用到make或makeinstall。使用make工具,我们能够将年夜型的开辟项目分化成为多个更容易于办理的模块,关于一个包含几百个源文件的使用程序,利用make和makefile工具就能够十拿九稳的理顺各个源文件之间纷纷庞大的互相干系。
可是假如经由过程查阅make的匡助文档来手工编写Makefile,对任何程序员都是一场应战。幸而有GNU供应的Autoconf及Automake这两套工具使得编写makefile不再是一个困难。
本文将先容怎样使用GNUAutoconf及Automake这两套工具来帮忙我们主动发生Makefile文件,而且闪开收回来的软件能够像年夜多半源码包那样,只需"./configure","make","makeinstall"就能够把程序安装到体系中。
摹拟需求
假定源文件按以下目次寄存,如所示,使用autoconf和automake天生makefile文件。
[img=217border=0,190alt=autoconf和automake天生Makefile文件(图一)src=]http://www.ckuyun.com/[/img]
文件目次布局
假定src是我们源文件目次,include目次寄存其他库的头文件,lib目次寄存用到的库文件,然后入手下手按模块寄存,每一个模块都有一个对应的目次,模块下再份子模块,如apple、orange。每一个子目次下又分core,include,shell三个目次,个中core和shell目次寄存.c文件,include的寄存.h文件,其他相似。
样例程序功效:基于多线程的数据读写回护。
工具简介
所必需的软件:autoconf/automake/m4/perl/libtool(个中libtool非必需)。
autoconf是一个用于天生能够主动地设置软件源码包,用以顺应多种UNIX类体系的shell剧本工具,个中autoconf必要用到m4,便于天生剧本。automake是一个从Makefile.am文件主动天生Makefile.in的工具。为了天生Makefile.in,automake还需用到perl,因为automake创立的公布完整遵守GNU尺度,以是在创立中不必要perl。libtool是一款便利天生各类程序库的工具。
今朝automake撑持三种目次条理:flat、shallow和deep。
1)flat指的是一切文件都位于统一个目次中。
就是一切源文件、头文件和其他库文件都位于以后目次中,且没有子目次。Termutils就是这一类。
2)shallow指的是次要的源代码都贮存在顶层目次,其他各个部分则贮存在子目次中。
就是次要源文件在以后目次中,而别的一些完成各部分功效的源文件位于各自分歧的目次。automake自己就是这一类。
3)deep指的是一切源代码都被贮存在子目次中;顶层目次次要包括设置信息。
就是一切源文件及本人写的头文件位于以后目次的一个子目次中,而以后目次里没有任何源文件。GNUcpio和GNUtar就是这一类。
flat范例是最复杂的,deep范例是最庞大的。不丢脸出,我们的摹拟需求恰是基于第三类deep型,也就是说我们要做应战性的事变:)。注:我们的测试程序是基于多线程的复杂程序。
天生Makefile的前因后果
起首进进project目次,在该目次下运转一系列命令,创立和修正几个文件,就能够天生切合该平台的Makefile文件,操纵历程以下:
1)运转autoscan命令
2)将configure.scan文件重定名为configure.in,并修正configure.in文件
3)在project目次下新建Makefile.am文件,并在core和shell目次下也新建makefile.am文件
4)在project目次下新建NEWS、README、ChangeLog、AUTHORS文件
5)将/usr/share/automake-1.X/目次下的depcomp和complie文件拷贝到本目次下
6)运转aclocal命令
7)运转autoconf命令
8)运转automake-a命令
9)运转./confiugre剧本
能够经由过程看生产生Makefile的流程,如图所示:
Configure.in的陈腔滥调文
当我们使用autoscan工具天生confiugre.scan文件时,我们必要将confiugre.scan重定名为confiugre.in文件。confiugre.in挪用一系列autoconf宏来测试程序必要的或用到的特征是不是存在,和这些特征的功效。
上面我们就来目击一下confiugre.scan的庐山真脸孔:
#Processthisfilewithautoconftoproduceaconfigurescript.
AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HE
1234下一页
对于linux命令,一定要学会用man和info去查他们的解释; |