有很多使用autotools的程序,每个有复杂的输入集合。输入文件发生改变时,用适当的顺序运行适当的程序是重要的。不幸的是同时记住依赖关系和顺序是困难的。

例如,无论你任何时候编辑configure.in,你必须重新运行aclocal,即使是你加一个引用到一个新宏。你也必须通过运行autoconf重建configure;config.h通过运行autoheader重建,即使你加一个新的AC_DEFINE;或者automake增加一个新的AC_SUBSTs到makefile.in的变量。如果你编辑一个makefile.am文件,你必须重新运行automake。在这两种情况下,你必须重新运行config.status,如果configure被改变,需要重新检查,然后运行config.status重新创建makefile。
用创建系统开发你的项目的时候,依赖关系很快变得令人烦恼。当然,automake知道怎样自动地处理这些。一般,automake产生一个makefile.in文件,这个文件定义了各部分的依赖关系,并以适当的顺序自动运行各种必要的工具。这一切都假设所用到的工具的版本都是正确的。
autotool程序有一个脚本准备做这些,你生成一个makefle之前或你从代码库获取新的代码时,它将用正确的顺序自动地运行各种工具。对于怎样做这个,至少有两种方法-autogen.sh和bootstrap:
autogen.sh  
从开始,这就是一个不好的名字对于bootstrap脚本,因为GNU已经有一个自动的文本生成工具叫AutoGen.bootstrap运行过后,通常安装包会有脚本自动运行生成configure脚本,以autogen.sh作为参数传递给configure。除非你不知道你想要什么选项,直到configure脚本生成为止,你不能运行configure --help。如果你发现自己编译的项目用这种方式建立,我建议你输入:
$ /bin/sh ./autogen.sh --help
忽略假的warning提示,那只是告诉你conigure将被执行。
bootstrap
越来越多地,许多项目通过调用它们的bootstrap脚本启动。启动脚本简单地运行各种各样的必须的命令,使源代码处于可安装的状态,最终用户能简单地运行:
$ configure
$ make
$ make install
不幸的是很多人没有在他们的发布包里放置bootstrap脚本。因此除了开发者机器的创建环境发生改变的时候,这个脚本不是必须的。这意味着autogen.sh的使用者可能从来没有看到其他方法的优点。
Autoconf带有一个和bootstrap脚本具有同样功能的程序叫做autoreconf。因为autoreconf很少被使用,从来也不有名,仅仅在autoconf2.13版本里和automake一起使用。甚至autoconf2.13版本的autoreconf也不处理动态库和automake相关的选项。
直到autoreconf出现之前,我们推荐bootstrap方法。在写这本书的时候,我们所使用的bootstrap是一个还没有被标准化的版本:
#! /bin/sh
aclocal \
&& automake --gnu --add-missing \
&& autoconf
在这里我们不使用autoreconf,因为它不能处理我们想要的`--add-missing'选项。一个典型的bootstrap可能也运行libtoolize或者autoheader。
所有工具的版本的正确性对于开发者来说是很重要的,这样能够避免由于版本疏忽导致的许多问题。在工作中版本不一致是很值得注意的问题。因此automake默认地提供了一个机制避免这些问题,当开发者知道他们的环境是正确设置的时候,用户可以激活它们。
为了能够使用这个方法,你首先必须添加AM_MAINTAINER_MODE到`configure.in'.这将添加`--enable-maintainer-mode'选项到configure;当指定这个选项的时候将导致“维护者规则”被激活。
注意,维护者方式是一个有争议的属性。有些人喜欢使用它是因为在某些情况下它导致较少的错误报告。例如,cvs不保存文件的相对时间戳。如果你的项目同时有configure.in和configure两个文件,而且没有使用维护者模式,那么有时make将需要重新生成configure,即使这不是必须的。这会给开发者带来更多的麻烦--在一个大的项目里,有很多开发者不想接触configure.in,甚至很多人不想安装GNU Autotools.
还有一些人认为最终用户应该使用和开发者一样的创建系统,维护者模式是不推荐的,而且维护者模式是不安全的--你很容易地忘记自己使用的是什么,忘记重建,忽略正确的测试,一个改变或者重建系统。在非维护者模式下,使用一个不存在的维护者工具时automake的missing脚本将会发出一个警告给用户。
你采用的方法取决于项目的参与者的情况。

转载于:https://blog.51cto.com/meddandelion/1186924

Autobook中文版 (六)-- 8. Bootstrapping相关推荐

  1. Autobook中文版(七)—9.一个小的GNU Autotools项目

    9.一个小的GNU Autotools项目 本章介绍一个真实的小例子,演示一些GNU Autotools具有的特性,指明一些GNU Autotools使用上的陷阱.所有的源码能被下载从本书的主页上.这 ...

  2. Web Hacking 101 中文版 六、HTTP 参数污染

    六.HTTP 参数污染 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述 HTTP 参数污染,或者 HPP,在网站接受用户输入,将其用于生成发往其它系统的 H ...

  3. luajit开发文档wiki中文版(六) LuaJIT 开发

    2022年6月10日15:20:41 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文 ...

  4. luajit开发文档wiki中文版(四) LuaJIT 内部结构

    2022年6月10日15:15:22 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文 ...

  5. luajit开发文档中文版(二)LuaJIT扩展

    2022年6月10日15:33:04 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文 ...

  6. luajit开发文档wiki中文版(二) LuaJIT 扩展

    2022年6月9日09:39:53 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文档 ...

  7. luajit开发文档中文版(一)下载和安装

    2022年6月10日15:32:51 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文 ...

  8. luajit开发文档wiki中文版(五) 系统集成

    2022年6月10日15:15:35 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文 ...

  9. vnc远程控制软件中文版,盘点六款好用的vnc远程控制软件中文版

    vnc远程控制软件中文版不是很多,基本上都是英文的.所以可能会比较的难找一点.中文版的比较符合国人的使用要求,简单方便快捷明了.所以接下来小编给大家盘点六款好用的vnc远程控制软件中文版吧. 第一款: ...

  10. C Primer Plus第六版(中文版)编程练习答案(完美修订版)汇总

    //本文是博主编写的C Primer Plus第六版(中文版)编程练习答案的所有链接; //使用超链接汇总于此,若是有用请点赞收藏并分享给他人; C Primer Plus 第六版(中文版)第二章(完 ...

最新文章

  1. html5金牌榜,member-Grading.html
  2. Mac os下安装brew
  3. Merge Two Sorted Lists leetcode java
  4. 70. 爬楼梯(JavaScript)
  5. Linux下用ImageMagick将彩色照片转换成黑白照片
  6. 当你写爬虫抓不到APP请求包的时候该怎么办?【高级篇-混淆导致通用Hook工具失效】...
  7. PowerLinux 服务器上安装 Oracle (详细步骤)
  8. 软件再快不如自带:找不到电脑文件?教你这 3 个Mac搜索技巧
  9. 因未发项目奖金,一程序员删代码泄愤被判刑5个月
  10. 面试:谈谈你对jQuery的理解
  11. java版spring cloud+spring boot+redis社交电子商务平台-docker-feign配置(五)
  12. VC2012换字体问题
  13. 【鸡汤】过往不恋,未来不迎,当下不杂
  14. txt转mobi格式
  15. 澳大利亚每日电价和需求文本数据(2015-2020)
  16. 王道数据结构课代表 - 考研数据结构 第三章 栈和队列 究极精华总结笔记
  17. 精华【分布式微服务云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
  18. 数据安全运营体系建设
  19. html 边框终点 圆点,CSS设置虚线或虚边框dashed border
  20. 签名验签服务器的作用,卫士通签名验证服务器

热门文章

  1. 苹果机查看macOS版本号
  2. WINDOWS搜索dll的路径顺序
  3. VS2017编译OpenJDK,编译通过的工程包下载链接
  4. WINDOWS如何编写注册表文件
  5. 怪事:两台linux的samba共享目录,一个能访问一个不能访问
  6. 勿以用户自居,张口就用户如何
  7. data1 op data2 c语言,编写一个简单计算器程序,输入格式为:data1 op data2。其中data1和data2是参加...
  8. python orm开发模型_Python ORM框架Peewee初探【二】创建或者生成模型
  9. 如何调用畅捷通接口_用友金蝶多组织多账套的不同数据如何合并?
  10. 怎么修改数组中指定元素_topK问题总结:数组中的前K大元素