在 Linux (Ubuntu 16.04) 上从源代码安装 C/C++ 包时,我看到了一个常见模式:
./autogen.sh
./configure
make
make install
我理解
make
和 make install
,我猜 configure
根据用户偏好创建了 Makefile
,但我不明白为什么 autogen.sh
是必要的。
有人知道它是做什么用的吗?
步骤:
autogen.sh
脚本生成configure
脚本(来自configure.ac
,使用autoconf)及其所需的任何文件(例如使用automake从Makefile.in
创建Makefile.am
)。这需要在您的系统上安装自动工具,并且必须在从源代码管理中签出项目时运行它(如果 configure
未签入)。下载源 tarball 的人通常可以跳过此步骤,因为此步骤的输出包含在源 tarball 中。
注意 这通常相当于
autoreconf --install
。如果没有 autogen.sh
文件,则只需运行 autoreconf --install
即可。如果您继承了带有 autogen.sh
的项目,如果可以使用 autoreconf --install
,请考虑将其删除。configure
脚本生成Makefile
以及构建所需的其他文件。通常,Makefile.in
用作模板来生成Makefile
(并使用config.h.in
来生成config.h
)。此过程仅使用系统上安装的标准工具(例如 sed 和 awk)进行,并且不需要安装自动工具。make
命令构建软件。make install
命令安装它。这些被分为不同的步骤,因为它们通常在不同的时间运行。
autogen.sh
步骤传统上由开发软件的人员运行,因为他们需要在其系统上安装 autoconf 并对 configure.ac
进行更改。最终用户不应安装自动工具。
现在,这些期望已经发生了一些变化,因为最终用户更有可能检查源代码控制之外的项目,而不是下载源版本。
这仅适用于使用 autotools 构建链构建的程序/库。它生成由
configure
脚本配置的文件。然后,配置脚本填充 .in
文件并从 Makefile
模板生成 Makefile.am
。最终可以用来编译、链接和安装程序/库。
随着向多平台软件包的迁移,它正在慢慢过时。 CMake 和更现代的工具链是最先进的。