在 Linux 上构建 C++ 包时 autogen.sh 的作用是什么[重复]

问题描述 投票:0回答:2

在 Linux (Ubuntu 16.04) 上从源代码安装 C/C++ 包时,我看到了一个常见模式:

  1. ./autogen.sh
  2. ./configure
  3. make
  4. make install

我理解

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

有人知道它是做什么用的吗?

c++ c makefile configure autoconf
2个回答
60
投票

步骤:

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

    注意 这通常相当于

    autoreconf --install
    。如果没有
    autogen.sh
    文件,则只需运行
    autoreconf --install
    即可。如果您继承了带有
    autogen.sh
    的项目,如果可以使用
    autoreconf --install
    ,请考虑将其删除。

  2. configure
    脚本生成
    Makefile
    以及构建所需的其他文件。通常,
    Makefile.in
    用作模板来生成
    Makefile
    (并使用
    config.h.in
    来生成
    config.h
    )。此过程仅使用系统上安装的标准工具(例如 sed 和 awk)进行,并且不需要安装自动工具。

  3. make
    命令构建软件。

  4. make install
    命令安装它。

这些被分为不同的步骤,因为它们通常在不同的时间运行。

autogen.sh
步骤传统上由开发软件的人员运行,因为他们需要在其系统上安装 autoconf 并对
configure.ac
进行更改。最终用户不应安装自动工具。

现在,这些期望已经发生了一些变化,因为最终用户更有可能检查源代码控制之外的项目,而不是下载源版本。


9
投票

这仅适用于使用 autotools 构建链构建的程序/库。它生成由

configure
脚本配置的文件。然后,配置脚本填充
.in
文件并从
Makefile
模板生成
Makefile.am
。最终可以用来编译、链接和安装程序/库。

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

© www.soinside.com 2019 - 2024. All rights reserved.