Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么是;“自动经济”;不经常使用?_Linux_Autotools_Autoreconf - Fatal编程技术网

Linux 为什么是;“自动经济”;不经常使用?

Linux 为什么是;“自动经济”;不经常使用?,linux,autotools,autoreconf,Linux,Autotools,Autoreconf,我是自动工具的新手。根据我的理解,可以使用以下基本步骤使用Autotools构建软件: autoreconf--install /configure make 然而,我注意到大多数开源软件包(Linux上)不需要步骤1。他们大多数时候只需要第2步和第3步来构建。似乎它们已经与Makefile.in打包在一起了。我想知道为什么?在创建软件包之前,他们是手动编写Makefile.in,还是软件开发人员使用autoeconf生成Makefile.in 谢谢。创建tarball(或从版本控制系统检查源代

我是自动工具的新手。根据我的理解,可以使用以下基本步骤使用Autotools构建软件:

  • autoreconf--install
  • /configure
  • make
  • 然而,我注意到大多数开源软件包(Linux上)不需要步骤1。他们大多数时候只需要第2步和第3步来构建。似乎它们已经与
    Makefile.in
    打包在一起了。我想知道为什么?在创建软件包之前,他们是手动编写
    Makefile.in
    ,还是软件开发人员使用
    autoeconf
    生成
    Makefile.in


    谢谢。

    创建tarball(或从版本控制系统检查源代码)的软件开发人员通常会从名为
    bootstrap.sh
    autogen.sh
    的脚本中调用
    autoeconf
    ,该脚本可能会执行其他操作
    autoreconf
    也可以由
    Makefile
    调用(如
    configure.ac
    已更改时)


    大多数用户永远不需要运行
    autoreconf
    ,即使是那些正在对源代码进行一些修改的用户(例如修补程序)。只有那些需要修改软件包本身(更改
    configure.ac
    和/或
    Makefile.am
    )的用户才需要
    autoeconf
    ,运行
    autoeconf
    需要已经安装正确版本的autotools。这导致了一个鸡和蛋的问题——首先,如何安装自动工具?它还增加了大多数最终用户并不真正需要的额外依赖性


    因此,大多数打包程序在生成他们分发的源tarball之前运行autoeconf。这意味着,如果您下载这样一个tarball,您可以配置和构建它,而无需先安装autotools。

    OK。我想我自己也得到了一个可能的答案:通过不需要用户运行“autoreconf”,软件包对最终用户的系统提出了更少的要求。即,最终用户无需安装自动工具。我认为这其实是一个很大很好的理由;运行
    configure
    时,用户所需要的只是两个脚本解释器(一个Bourne shell、sed,可能还有perl),以及编译器工具链。即使缺少所有库依赖项,
    configure
    脚本也应该能够运行并诊断问题或解决问题。当您运行
    make dist gzip
    时,您会得到一个带有
    configure
    脚本的tarball,以及所有
    *。在打包的
    模板文件中,用户不必执行前面需要自动工具的步骤。如果您想从源代码引导系统而不使用预先生成的
    configure
    脚本,那么,不使用autotools/configure直接安装autotools也不是不可能的(
    autoconf
    只是一个shell脚本,您只需要替换一些可以用
    sed
    完成的占位符变量)。一旦有了一个版本的autotools,引导其他版本就容易多了。