在 Linux 上构建 C++ 程序包时 autogen.sh 的工作是什么

What is the job of autogen.sh when building a c++ package on Linux

我在 Linux (Ubuntu 16.04) 上从源安装 c/c++ 软件包时看到了一个常见模式:

  1. ./autogen.sh
  2. ./配置
  3. 制作
  4. 进行安装

我理解 makemake install,我猜想 configure 根据用户偏好创建了一个 Makefile,但我不明白为什么 autogen.sh 是必要的。

有人知道它的用途吗?

这仅适用于使用 autotools 构建链构建的程序/库。它生成由 configure 脚本配置的文件。配置脚本然后填充 .in 文件并从 Makefile.am 模板生成 Makefiles。最终可以用来编译,link和安装程序/库。

随着转向多平台包,它正在慢慢过时。 CMake 和更现代的工具链是最先进的。

步骤:

  1. autogen.sh 脚本生成 configure 脚本(来自 configure.ac,使用 autoconf)和它需要的任何文件(比如从创建 Makefile.in Makefile.am 使用 automake)。这需要在您的系统上安装 autotools,并且在从源代码管理检出项目时必须是 运行(如果未检入 configure)。下载源码压缩包的人通常可以跳过这一步,因为这一步的输出包含在源码压缩包中。

    注意这通常等同于autoreconf --install。如果没有 autogen.sh 文件,则只用 运行 autoreconf --install 代替。如果你已经继承了一个带有autogen.sh的项目,如果你可以使用autoreconf --install.

  2. 可以考虑删除它
  3. configure 脚本生成 Makefile 和构建所需的其他文件。通常 Makefile.in 用作生成 Makefile 的模板(以及 config.h.in 生成 config.h)。此过程仅使用系统上安装的标准工具(如 sed 和 awk)进行,不需要安装 autotools。

  4. make 命令构建软件。

  5. make install 命令安装它。

这些被分成不同的步骤,因为它们通常 运行 在不同的时间。 autogen.sh 这一步传统上是由开发软件的人 运行 完成的,因为他们需要在他们的系统上安装 autoconf 并且他们会对 configure.ac 进行更改。最终用户不应安装 autotools。

现在这些期望已经有所改变,因为最终用户更有可能从源代码控制中签出项目,而不是下载源版本。