AUTOMAKE工具.docx_第1页
AUTOMAKE工具.docx_第2页
AUTOMAKE工具.docx_第3页
AUTOMAKE工具.docx_第4页
AUTOMAKE工具.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

configure.in内容开始1. #-*-Autoconf-*- 2. #Processthisfilewithautoconftoproduceaconfigurescript. 3. AC_INIT(helloworld.c) 4. AM_INIT_AUTOMAKE(helloworld,1.0) 5. #Checksforprograms. 6. AC_PROG_CC 7. #Checksforlibraries. 8. #Checksforheaderfiles. 9. #Checksfortypedefs,structures,andcompilercharacteristics. 10. #Checksforlibraryfunctions. 11. AC_OUTPUT(Makefile) configure.in内容结束然后执行命令aclocal和autoconf,分别会产生aclocal.m4及configure两个文件: 1. $aclocal 2. $ls 3. aclocal.m4configure.inhelloworld.c 4. $autoconf 5. $ls 6. aclocal.m4autom4te.cacheconfigureconfigure.inhelloworld.c 大家可以看到configure.in内容是一些宏定义,这些宏经autoconf处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。 autoconf 是用来生成自动配置软件源代码脚本(configure)的工具。configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预。 要生成configure文件,你必须告诉autoconf如何找到你所用的宏。方式是使用aclocal程序来生成你的aclocal.m4。aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。 autoconf从configure.in这个列举编译软件时所需要各种参数的模板文件中创建configure。 autoconf需要GNU m4宏处理器来处理aclocal.m4,生成configure脚本。 m4是一个宏处理器。将输入拷贝到输出,同时将宏展开。宏可以是内嵌的,也可以是用户定义的。除了可以展开宏,m4还有一些内建的函数,用来引用文件,执行命令,整数运算,文本操作,循环等。m4既可以作为编译器的前端,也可以单独作为一个宏处理器。4、新建Makefile.am 新建Makefile.am文件,命令: $ vi Makefile.am 内容如下: AUTOMAKE_OPTIONS=foreignbin_PROGRAMS=helloworldhelloworld_SOURCES=helloworld.c automake会根据你写的Makefile.am来自动生成Makefile.in。 Makefile.am中定义的宏和目标,会指导automake生成指定的代码。例如,宏bin_PROGRAMS将导致编译和连接的目标被生成。5、运行automake 命令: 1. $automake-add-missing 2. configure.in:installing./install-sh 3. configure.in:installing./mkinstalldirs 4. configure.in:installing./missing 5. Makefile.am:installing./depcompautomake会根据Makefile.am文件产生一些文件,包含最重要的Makefile.in。6、执行configure生成Makefile 1. $./configure 2. checkingforaBSD-compatibleinstall./usr/bin/install-c 3. checkingwhetherbuildenvironmentissane.yes 4. checkingforgawk.gawk 5. checkingwhethermakesets$(MAKE).yes 6. checkingforgcc.gcc 7. checkingforCcompilerdefaultoutput.a.out 8. checkingwhethertheCcompilerworks.yes 9. checkingwhetherwearecrosscompiling.no 10. checkingforsuffixofexecutables. 11. checkingforsuffixofobjectfiles.o 12. checkingwhetherweareusingtheGNUCcompiler.yes 13. checkingwhethergccaccepts-g.yes 14. checkingforgccoptiontoacceptANSIC.noneneeded 15. checkingforstyleofincludeusedbymake.GNU 16. checkingdependencystyleofgcc.gcc3 17. configure:creating./config.status 18. config.status:creatingMakefile 19. config.status:executingdepfilescommands 20. $ls-lMakefile 21. -rw-rw-r-1yutaoyutao15035Oct1510:40Makefile 你可以看到,此时Makefile已经产生出来了。7、使用Makefile编译代码 1. $make 2. ifgcc-DPACKAGE_NAME=-DPACKAGE_TARNAME=-DPACKAGE_VERSION=- 3. DPACKAGE_STRING=-DPACKAGE_BUGREPORT=-DPACKAGE=helloworld-DVERSION=1.0 4. -I.-I.-g-O2-MThelloworld.o-MD-MP-MF.deps/helloworld.Tpo 5. -c-ohelloworld.otest-fhelloworld.c|echo./helloworld.c; 6. thenmv-f.deps/helloworld.Tpo.deps/helloworld.Po; 7. elserm-f.deps/helloworld.Tpo;exit1; 8. fi 9. gcc-g-O2-ohelloworldhelloworld.o 10. 运行helloworld 11. $./helloworld 12. Hello,LinuxWorld!这样helloworld就编译出来了,你如果按上面的步骤来做的话,应该也会很容易地编译出正确的helloworld文件。你还可以试着使用一些其他的make命令,如make clean,make install,make dist,看看它们会给你什么样的效果。感觉如何?自己也能写出这么专业的Makefile,老板一定会对你刮目相看。【编辑推荐】1. Autoconf使用关于autoconf安装条件介绍 2. Autoconf使用生成Makefile的方法及其规则 3. autoconf安装关于可移植的源代码详解 4. Autoconf教程关于UNIX文件系统概述 5. Autoconf教程关于安全管理介绍 6. 使用automake自动生成Makefile日期:2012-03-10来源:Linux社区 作者:naturebe7.8. 第一回用automake,而不是自己写makefile,感觉技术高了一个档次(其实还是老样子。)我用的电脑主要是 Fedora14 还有Red Ha Enterprise 5.9. 首先编写自己需要的源代码,我的工程是编写好了server还有client的程序,还有其他要用到的一些自定义的头文件等等,最终是要生成server和client的可执行程序。10. -11. 运行 autoscan , 自动创建两个文件: autoscan.log configure.scan此时状态如下:rootlocalhost main# autoscanrootlocalhost main# lsautoscan.log configure.scan .rootlocalhost main# -12. 修改configure.scan的文件名为configure.in13. 修改: 1.修改AC_INIT里面的参数: AC_INIT(v1.4,.2.8, ) 2.添加宏AM_INIT_AUTOMAKE, 它是automake所必备的宏,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。14. 查看configure.in的内容:-# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ(2.66)AC_INIT(v1.4, 2.8 , )AC_CONFIG_SRCDIR(soapC.cpp)AC_CONFIG_HEADERS(config.h)AM_INIT_AUTOMAKE(v1.4, 2.8)# Checks for programs.AC_PROG_CXXAC_PROG_CC# Checks for libraries.# Checks for header files.AC_CHECK_HEADERS(arpa/inet.h fcntl.h float.h limits.h locale.h memory.h netdb.h netinet/in.h stdint.h stdlib.h string.h strings.h sys/ioctl.h sys/socket.h sys/time.h sys/timeb.h unistd.h)# Checks for typedefs, structures, and compiler characteristics.AC_HEADER_STDBOOLAC_TYPE_SIZE_T# Checks for library functions.AC_FUNC_MALLOCAC_FUNC_MKTIMEAC_FUNC_STRERROR_RAC_FUNC_STRTODAC_CHECK_FUNCS(ftime gethostbyname gettimeofday localtime_r memmove memset select socket strchr strerror strrchr strstr strtoull)AC_CONFIG_FILES(Makefile)AC_OUTPUT-解读以上的文件:# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.# AC_PREREQ:# 确保使用的是足够新的Autoconf版本。如果用于创建configure的Autoconf的版# 本比version 要早,就在标准错误输出打印一条错误消息并不会创建configure。AC_PREREQ()# 初始化,定义软件的基本信息,包括设置包的全称,版本号以及报告BUG时需要用的邮箱地址AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)# 用来侦测所指定的源码文件是否存在,来确定源码目录的有效性AC_CONFIG_SRCDIR(main.c)# 用于生成config.h文件,以便autoheader使用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.# 创建输出文件。在configure.in的末尾调用本宏一次。AC_OUTPUT-运行 aclocal, 生成一个“aclocal.m4”文件和一个缓冲文件夹autom4te.cache,该文件主要处理本地的宏定义。此时的状态是:rootlocalhost main# aclocalrootlocalhost main# lsaclocal.m4 autom4te.cache autoscan.log configure.in configure.in main.crootlocalhost main# -运行 autoconf, 目的是生成 configure 此时的状态是:rootlocalhost main# autoconfrootlocalhost main# lsaclocal.m4 autoscan.log configure.in main.cautom4te.cache configure configure.inrootlocalhost main# 15. 运行 autoheader,它负责生成config.h.in文件。16. 该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件。17. 此时的状态是:rootlocalhost main# autoheader 18. rootlocalhost main# lsaclocal.m4 autoscan.log configure configure.inautom4te.cache config.h.in configure.in main.crootlocalhost main# -19. 创建一个 Makefile.am.这一步是创建Makefile很重要的一步,automake要用的脚本配置文件是Makefile.am,用户需要自己创建相应的文件。20. 之后,automake工具转换成Makefile.in。21. 这个Makefile.am的内容如下:22. -AUTOMAKE_OPTIONS = foreignbin_PROGRAMS =server clientserver_SOURCES =(这里自己添上所以和server相关的源文件,文件之间用空格隔开)client_SOURCES =(这里自己添上所以和server相关的源文件)server_LDFLAGS=$(mysql_config -libs) $(mysql_config -include) -l mysqlclient(这行是需要用到该库时才需要)server_LDADD = -lpthread(这行是需要用到该库时才需要)-下面对该脚本文件的对应项进行解释。 其中的AUTOMAKE_OPTIONS为设置automake的选项。由于GNU(在第1章中已经有所介绍)对自己发布的软件有严格的规范,比如必须附 带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了三种软件等级:foreign、gnu和gnits,让用 户选择采用,默认等级为gnu。在本例使用foreign等级,它只检测必须的文件。 XXXX_PROGRAMS定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开。 server_SOURCES定义“server”这个执行程序所需要的原始文件。如果”main”这个程序是由多个原始文件所产生的,则必须把它所用到的所有原 始文件都列出来,并用空格隔开。例如:若目标体“main”需要“main.c”、“sunq.c”、“main.h”三个依赖文件,则定义 server_SOURCES=main.c sunq.c main.h。要注意的是,如果要定义多个执行文件,则对每个执行程序都要定义相应的file_SOURCES。使用automake对其生成“configure.in”文件,在这里使用选项“adding-missing”可以让automake自动添加有一些必需的脚本文件。运行后的状态是:-rootlocalhost main# automake -add-missingconfigure.in:8: installing ./missingconfigure.in:8: installing ./install-shMakefile.am: installing ./depcomprootlocalhost main# lsaclocal.m4 config.h.in configure.in main.c Makefile.inautom4te.cache configure depcomp Makefile.am missingautoscan.log configure.in install-sh Makefile.amrootlocalhost main# -运行configure,在这一步中,通过运行自动配置设置文件configure,把Makefile.in变成了最终的Makefile。运行的结果如下:-rootlocalhost main# ./configure checking for a BSD-compatible install. /usr/bin/install -cchecking whether build environment is sane. yeschecking for a thread-safe mkdir -p. /bin/mkdir -pchecking for gawk. gawkchecking whether make sets $(MAKE). yeschecking for gcc. gccchecking for C compiler default output file name. a.outchecking whether the C compiler works. yeschecking whether we are cross compiling. nochecking for suffix of executables. checking for suffix of object files. ochecking whether we are using the GNU C compiler. yeschecking whether gcc accepts -g. yeschecking for gcc option to accept ISO C89. none neededchecking for style of include used by make. GNUchecking dependency style of gcc. gcc3configure: creating ./config.statusconfig.status: creating Makefileconfig.status: creating config.hconfig.status: executing depfiles commands23. -24. 运行 make,对配置文件Makefile进行测试一下,应该可以执行可执行文件了。25. 我的系统下已经通过了,文件多的话,确实用自动生成makefile会比自己写要容易,第一次会比较麻烦,熟悉了就很好了。我也是照着往上面的文章做的。26. 3.运行aclocal生成aclocal.m4文件 27. configure.in文件编辑保存完后,用aclocal命令生成aclocal.m4文件。28. 执行以下命令:29. $aclocal30. 然后用ls列出生成的文件。如果没有找到aclocal.m4文件,那一般是configure.in文件不对,修改后再重试。31. 4.运行autoconf生成configure文件32. 用autoconf命令来生成configure可执行文件。33. 执行以下命令:34. $autoconf35. 然后用ls检查configure是否已经成功生成。36. 5.建立Makefile.am文件37. Makefile.am是用来生成Makefile.in的,需要你手工书写。Makefile.am中定义了一些内容:38. AUTOMAKE_OPTIONS39. 这个是automake的选项。在执行automake时,它会检查目录下是否存在标准GNU软件包中应具备的各种文件,例如AUTHORS、ChangeLog、NEWS等文件。我们将其设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论