如何创建配置脚本?

god*_*lla 67 linux bash makefile configure

这可能听起来像一个非常通用的问题,但在这里.

我有一个要求,以创建我的应用程序配置脚本,将生成的这种配置的结果makefile(基本configure,make,make install).我的问题是,我从哪里开始构建这个?我可以效仿一个例子吗?

dAm*_*m2K 69

要创建标准的"configure"脚本,您需要GNU autoconf.您可能也需要GNU automake和libtool.

有大量的文档和howtos.谷歌的"autoconf automake howto"之类的东西.好的文档在官方手册页面中:

Autoconf将从"configure.ac"文件开始创建配置脚本."Makefile.am"文件将指示automake如何通过configure字符串创建makefile.需要Libtool来简化代码周围的库处理.

您可以手动开始创建configure.ac文件,也可以使用"自动扫描"帮助程序,它可以帮助您为自己创建半自动的东西.

然后,当你准备好了,这个人会做出魔术:

autoreconf -i
Run Code Online (Sandbox Code Playgroud)


ham*_*mSh 22

在linux中有构建流程
在此输入图像描述 还有一个非常好的教程
https://robots.thoughtbot.com/the-magic-behind-configure-make-make-install


Ala*_*sen 5

有时,软件产品会附带没有配置脚本。寻找 autogen.sh 脚本。它可能会运行:

aclocal || die "aclocal failed"
automake --add-missing --force-missing --copy --foreign || die "automake failed"
autoreconf || die "autoreconf failed"
Run Code Online (Sandbox Code Playgroud)


Jus*_*ers 5

所有这些答案都是关于autoconf哪个是 GNU 工具。然而,configureshell 脚本早在 GNU 之前就已经出现在 UNIX 中,并且可以手动或以其他方式创建。

\n

配置有什么作用?

\n

configure只是一个shell脚本。它的工作是生成 makefile 在该特定系统上构建软件所需的配置变量列表。例如,它可能确定包含特定库所需的链接器标志和标头搜索路径。

\n

configure还可以接受用户的选项,例如控制是否在调试或发布模式下构建。

\n

通常configure将这些变量写入一个名为 的文件,config.mk该文件包含在makefile. 它还可能生成config.h带有一些预处理器定义的标头。请注意,configure 只是一个有助于生成此内容的自动化工具。用户始终可以手动编辑config.mk自己(尤其是在晦涩的系统上)。

\n

配置如何检测功能?

\n

configure使用各种技术来定位依赖关系并检测系统或硬件功能。最不稳定的(但有时是必要的方法)是检查uname操作系统。一种有用的工具pkg-config可以告诉您在哪里可以找到各种已安装的库。

\n

最后,配置脚本总是可以生成小代码片段,然后尝试编译它们以查看某个功能是否可用。

\n

乔·尼尔森(Joe Nelson)有一篇很棒的文章,其中每个想法都有示例。

\n

我应该编写自己的配置还是使用 autoconf?

\n

大多数程序只需要检测 1 或 2 个小东西即可运行。我认为在这些情况下编写配置脚本是有意义的,而不是试图找出自动工具这一庞大软件的极端情况。如果您生产一个简单的产品,config.mk它总是可以手动修复,并且各种系统的用户将有助于获得您的configure正常工作。

\n

对于更复杂的依赖关系,autoconf可能很有用。

\n

为了对各方公平,让我们将文档中提出的论点autoconf联系起来

\n
\n

Autoconf 的主要目标是让用户\xe2\x80\x99 的生活更轻松;让维护者\xe2\x80\x99的生活更轻松只是次要目标。

\n
\n
\n

Autoconf 在其目标方面非常成功\xe2\x80\x94 对 Autoconf 列表的大多数抱怨都是关于编写 Autoconf 输入的困难,而不是最终配置的行为。即使不\xe2\x80\x99t 使用 Autoconf 的软件包通常也会提供一个配置脚本,而对这些替代的自制脚本最常见的抱怨是它们无法满足一个或多个 GNU 编码标准(请参阅《配置》中的配置)。 GNU 编码标准)是用户期望从 Autoconf 生成的配置脚本中获得的。

\n
\n

总结一下:

\n
    \n
  • 您的配置可能没有某些用户期望的所有命令。
  • \n
  • 例如,您可能会错误地检测功能或使用错误的假设if macOS { use mac commands } else { use linux commands },而不是if gnuTools { use gnu commands } else { use bsd/posix commands }.
  • \n
\n

您必须确定这对您是否重要。

\n