2022年automake的教程 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年automake的教程 .pdf》由会员分享,可在线阅读,更多相关《2022年automake的教程 .pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、转一个 automake的教程2008年 06 月 24 日 星期二 下午 03:03 使用 GNU autotools 改造一个软件项目本文不是一篇规范的教程,而是用一个软件项目作为例子,演示使用 GNU autotools 进行软件管理的思路和过程目 录 示例项目 软件布局 Makefile 分析 GNU 的软件风格 准备 autotools 改造文件布局 autoscan configure.ac 的基本结构 Makefile 文件的产生 编写 Makefile.am 软件根目录 Makefile.am src/Makefile.am data/Makefile.am docs/Make
2、file.am fonts/Makefile.am images/Makefile.am music/Makefile.am sound/Makefile.am 运行 autotools SDL 库的侦测 软件使用的数据文件 configure 选项 autotools 脚本 使用 configure 产生的 Makefile 最终的 configure.ac 文件 结束语示例项目这里借用了 Wei Mingzhi 开发的麻将游戏来进行演示,在此,先对他表示感谢!名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 18 页 -示例软件下载:软件布局将下载的软件包解压到一个目录$cd/
3、work$tar xjf mahjong.tar.bz2 可以看到这是一个典型的 Windows 风格的软件项目布局,在 mahjong 目录下放着程序的源码,程序运行时使用的数据文件放在子目录下面作者还提供了一个 Makefile,一个 DOS 风格的 !play.bat 批处理文件,一个编译好的mj.exe 可执行文件在 Win32 平台上运行 !play.bat 就可以直接运行程序在Unix/Linux 系统上,进入 mahjong 目录,键入 make 命令,如果一切顺利的话,将生成 mj 可执行文件,然后在命令行上运行./mj 程序,也可以启动麻将游戏对于一个 Windows 程序来
4、讲,该软件布局可以说非常清晰明了但在 Unix/Linux 系统上,执行 make 命令就可能遇到问题:编译找不到头文件,或者连接找不到库文件而在make 成功以后,运行麻将程序必须先进入该 majiong 目录,才能执行程序如果要像其他的程序一样,可以在任意目录使用,就要专门为这一个程序修改 PATH 环境变量,或者再写一个启动脚本,并将它复制到/usr/bin 这样的目录下Makefile 分析1#2#Copyright(c)2005,Wei Mingzhi.All rights reserved.3#4#Use,redistributions and modifications of t
5、his file is 5#unrestricted provided the above copyright notice is 6#preserved.7#8 9 OBJ=名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 18 页 -10 bot.o config.o game.o general.o hand.o ini.o main.o 11 player.o text.o tile.o util.o 12 13 HEADERS=14 bot.h game.h general.h hand.h ini.h main.h player.h 15 tile.h 16 17 CC
6、=gcc 18 CXX=g+19 20 TARGET=mj 21 22 BASEFLAGS=-g3-D_DEBUG=1 23#BASEFLAGS=-s-O3 24 25 CFLAGS=$BASEFLAGS sdl-config-cflags 26 LDFLAGS=$BASEFLAGS sdl-config-libs-lSDL_image-lSDL_mixer-lSDL_ttf 27 28 all:$TARGET 29 30$TARGET:$OBJ 31$CXX$LDFLAGS-o$TARGET$OBJ 32 33 clean:34 rm-f*.o$TARGET 35 36 distclean:
7、37 rm-f*.o$TARGET 38 39%.o:%.cpp$HEADERS 40$CXX$CFLAGS-c$-o$41 42%.o:%.c$HEADERS 43$CC$CFLAGS-c$-o$Makefile 很清楚:第 20 行定义 TARGET 变量为 mj,第 28 行表明 make 默认的 target 也就是生成 mj;第 22 行加入编译时的调试信息;第 2526 行使用了sdl-config 工具侦测 SDL 开发库编译链接信息,在 26 行还指明需要连接SDL_imageSDL_mixser 和SDL_ttf 库名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共
8、 18 页 -GNU 的软件风格一个标准的 GNU 软件,编译安装都是使用下面三个步骤:$./configure$make$make install configure 脚本运行时可以侦测系统的环境,确定软件安装目录,然后生成Makefile 文件 make 调用系统中的编译器进行编译和连接make install 将软件安装到设定的目录用户执行 configure 时可以通过它的命令行参数指定自己所需的编译选项,比如安装目录通过-prefix=PREFIX 设置,如果不指定,缺省情况下 PREFIX 是/usr/local默认安装时,执行文件安装到 /usr/local/bin 目录,库安装
9、到 /usr/local/lib 目录,数据文件安装到 /usr/local/share 目录由于 GNU 的软件风格方便易用,通用性好,可移植性高,现在大多数 Unix/Linux 系统上的自由软件都采用这种方式分发软件准备 autotools GNU autotools 主要包含三个软件:autoconf,automake 和 libtool当前流行的有新旧两个版本,本例采用的是新版本,分别对应的是:autoconf 2.59,automake 1.9.6 和 libtool 1.5.18 很多 linux 发行版都会默认安装这几个工具本例是在 NetBSD 下进行操作,安装这几个软件包是
10、通过 pkgsrc,它们在 pkgsrc 目录为 devel/autoconf devel/automake 和devel/libtool 改造文件布局原来软件的根目录下面放的是程序的源码,按照 GNU 的习惯,将它们放到 src 子目录,名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 18 页 -根目录留给 configure 这类文件使用,其他的数据文件保持不变,仍然放在各自的子目录先创建一个目录 majiang,然后根据需要将 mahjong 目录下的文件复制过来由于是为Unix/Linux 系统进行改写,原目录里的 win32 相关文件就不用复制到新目录$cd/work/
11、majiang$ls data/docs/fonts/images/music/sound/src/autoscan autoconf 软件包里面的 autoscan 工具可以扫描工作目录,生成一个configure.ac 的模板文件 configure.scan$cd/work/majiang$autoscan autoscan 命令在当前目录生成的 configure.scan 文件内容为:1#-*-Autoconf-*-2#Process this file with autoconf to produce a configure script.3 4 AC_PREREQ(2.59)5
12、AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)6 AC_CONFIG_SRCDIR(src/bot.h)7 AC_CONFIG_HEADER(config.h)8 9#Checks for programs.10 AC_PROG_CXX 11 AC_PROG_CC 12 13#Checks for libraries.14 15#Checks for header files.16 AC_HEADER_STDC 17 AC_CHECK_HEADERS(limits.h malloc.h stdlib.h string.h unistd
13、.h)18 19#Checks for typedefs,structures,and compiler characteristics.20 AC_HEADER_STDBOOL 21 AC_C_CONST 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 18 页 -22 AC_C_INLINE 23 24#Checks for library functions.25 AC_FUNC_MALLOC 26 AC_FUNC_REALLOC 27 AC_CHECK_FUNCS(memset strcasecmp strchr strdup)28 AC_OUTPUT#号开始的行是注释,
14、其他都是 m4 宏命令将它改名为 configure.ac,然后在此基础上进行修改configure.ac 的基本结构configure.ac 文件是 autoconf 的输入文件,经过 autoconf 处理,展开里面的 m4 宏,输出的是 configure 脚本第 4 行声明本文件要求的 autoconf 版本,因为本例使用了新版本 2.59,所以在此注明第 5 行 AC_INIT 宏用来定义软件的名称和版本等信息,本例写成:AC_INIT(majiang,1.0)这里省略了 BUG-REPORT-ADDRESS 参数,它是可选项,一般写成作者的邮件地址第 6 行 AC_CONFIG_S
15、RCDIR 宏通过侦测所指定的源码文件是否存在,来确定源码目录的有效性可以选择源码目录中的任何一个文件作为代表,比如将 autoscan 选择的bot.h 文件改成 main.cpp:AC_CONFIG_SRCDIR(src/main.cpp)宏参数中使用 ,是为了表明其中的字符串是一个整体第 7 行的 AC_CONFIG_HEADER 宏用于生成 config.h 文件,里面存放configure 脚本侦测到的信息如果程序需要使用其中的定义,就在源码中加入#include 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 18 页 -其他的一些宏是标准的侦测过程,可以保留不动co
16、nfigure.ac 文件要求 AC_INIT 宏必须放在开头位置,AC_OUTPUT 放在文件末,中间用来检测编译环境的各种宏没有特别的先后次序要求,由宏之间相互关系决定Makefile 文件的产生前面 configure.ac 里面的宏,主要作用是侦测系统,并没有编译相关的设置因为这些信息是写在 Makefile.am 里面,然后用 automake 工具转换成 Makefile.in,configure 脚本执行时再读取 Makefile.in,并与侦测信息一起写到 Makefile 文件在 autotools 的命名习惯中,后缀 ac 的文件是 autoconf 的输入文件,后缀am
17、的文件是 automake 的输入文件,后缀 in 的文件是 configure 的输入文件autoconf 旧版本中 configure.in 等同于 configure.ac,虽然新版本也可以识别,但它不符合命名规则,所以新版本的文件应该使用 ac 后缀简单的 Makefile.in 可以手动编写,如果使用 automake 产生,需要在configure.ac 里面加入 AM_INIT_AUTOMAKE 宏进行声明要输出 Makefile,还需要在 configure.ac 中使用 AC_CONFIG_FILES 宏指明该宏并不是只处理 Makefile,而是将 FILE.in 文件转换
18、为 FILE 文件因为 make 可以遍历子目录,如果子目录中存在 Makefile,也将同时处理在本例中 src 目录下是源码,其他是数据文件,可以使用单独一个 Makefile 放在根目录下面,也可以用多个Makefile由于每个子目录的 Makefile 只处理本目录的文件,分工明确,是模块化的方法,推荐使用因此在 configure.ac 里面增加下面的宏,表示软件根目录和子目录中都需要生成Makefile 文件:AC_CONFIG_FILES(Makefile src/Makefile data/Makefile docs/Makefile 名师资料总结-精品资料欢迎下载-名师精心整
19、理-第 7 页,共 18 页 -fonts/Makefile images/Makefile music/Makefile sound/Makefile)编写 Makefile.am 软件根目录 Makefile.am 由于该目录下面保存的是与 autotools 相关的文件,没有需要编译安装的文件,所以只注明需要进一步处理的子目录信息:SUBDIRS=src data docs fonts images music sound src/Makefile.am 此目录里是源代码,最终生成 mj 可执行文件,在其 Makefile.am 中写入bin_PROGRAMS=mj mj_SOURCES
20、=bot.h bot.cpp config.cpp game.h game.cpp general.h general.cpp hand.h hand.cpp ini.h ini.cpp main.h main.cpp player.h player.cpp text.cpp tile.h tile.cpp util.cpp am 文件里变量通过命名判断其含义,保留的字符串间用下划线分隔bin_PROGRAMS 表示列出二进制的程序,值为多个空格分开的程序列表,这里仅名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 18 页 -有一个 mj mj_SOURCES 列出的是组成 mj
21、 程序的文件,文件比较多的时候,每个文件写成一行容易看清楚data/Makefile.am 本目录的文件是 mj 运行时读取的数据,它的 Makefile.am 可以这样写mjdatadir=$(pkgdatadir)/data mjdata_DATA=mj.ini titles.txt EXTRA_DIST=$(mjdata_DATA)因为 datadir 是保留的关键字,所以用 mjdatadir 代替,pkgdatadir 指向$prefix/share/FULL-PACKAGE-NAME 目录,因为在 AC_INIT 中已经声明FULL-PACKAGE-NAME 为majiang,pk
22、gdatadir 就等于$prefix/share/majiang 目录其中 mjdatadir 让 data 目录下的文件安装到$prefix/share/majiang/data 目录里面mjdata_DATA 列出此目录下需要安装的文件,然后用 EXTRA_DIST 变量注明余下几个子目录都与 data 目录类似docs/Makefile.am docsdir=$(pkgdatadir)/docs docs_DATA=gkai00mp.txt gpl.html readme.txt EXTRA_DIST=$(docs_DATA)fonts/Makefile.am fontsdir=$(p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年automake的教程 2022 automake 教程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内