博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Autobook中文版 (六)-- 8. Bootstrapping
阅读量:7216 次
发布时间:2019-06-29

本文共 2162 字,大约阅读时间需要 7 分钟。

hot3.png

有很多使用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://my.oschina.net/mdandelion/blog/128806

你可能感兴趣的文章
precision、recall、accuracy的概念
查看>>
PyTorch学习系列(九)——参数_初始化
查看>>
后缀树
查看>>
PowerDesigner执行SQL生成模型
查看>>
软件项目技术点(2)——Canvas之平移translate、旋转rotate、缩放scale
查看>>
软件项目技术点(25)——提升性能之检测绘制范围
查看>>
linux的基本操作1
查看>>
puppeteer 填充基础表单
查看>>
邻接表存储
查看>>
web 常用开发工具
查看>>
Silverlight LoaderException错误
查看>>
qt5.4.1的imx6编译
查看>>
我的window10
查看>>
【转载】jQuery的.live()和.die()
查看>>
函数式编程--函数式接口
查看>>
python--常用模块calendar
查看>>
register form
查看>>
Java中的clone
查看>>
Lucene基础(2)
查看>>
Oracle 存储过程
查看>>