虽然这个问题听起来很泛泛,但是还是让我来回答。
我有一个需求需要为我的应用程序创建一个配置脚本,该配置的结果将会生成一个makefile
(基本的configure
,make
,make install
)。我的问题是,我要从哪里开始构建这个?是否有我可以跟随的示例?
虽然这个问题听起来很泛泛,但是还是让我来回答。
我有一个需求需要为我的应用程序创建一个配置脚本,该配置的结果将会生成一个makefile
(基本的configure
,make
,make install
)。我的问题是,我要从哪里开始构建这个?是否有我可以跟随的示例?
autoreconf -i
aclocal || die "aclocal failed"
automake --add-missing --force-missing --copy --foreign || die "automake failed"
autoreconf || die "autoreconf failed"
autoconf
的。然而,在 GNU 之前,configure
shell 脚本就已经存在于 UNIX 中,并且可以手动创建或以其他方式创建。
configure 做了什么?
configure
只是一个 shell 脚本。它的工作是生成一组配置变量,这些变量是 makefile 在特定系统上构建软件所需的。例如,它可能确定链接器标志和头文件搜索路径,以包含特定库。
configure
还可以接受用户的选项,例如控制是否在调试或发布模式下构建。configure
将这些变量写入名为 config.mk
的文件中,该文件由 makefile
包含。它还可能生成一个带有一些预处理器定义的头文件 config.h
。请注意,configure 只是用于自动生成这些内容的有用自动化工具。用户始终可以手动编辑 config.mk
(特别是在不常见的系统上)。
configure 如何检测功能?
“配置”使用多种技术来定位依赖项并检测系统或硬件功能。最不稳定的(但有时必要的方法)是检查“uname”以检测操作系统。一个有用的工具是“pkg-config”,它可以告诉您在哪里找到各种已安装的库。autoconf
可能会很有用。autoconf
的 文档 中提出的论点:
Autoconf 的主要目标是使用户的生活更轻松;使维护者的生活更轻松只是次要目标。
Autoconf 在实现其目标方面非常成功——大多数针对 Autoconf 列表的投诉都是关于编写 Autoconf 输入时遇到的困难,而不是关于生成的 configure 的行为。即使不使用 Autoconf 的软件包通常也会提供一个 configure 脚本,而这些自制脚本最常见的投诉是它们未能满足用户从 Autoconf 生成的 configure 脚本中期望的 GNU 编码标准之一(请参见 GNU 编码标准中的配置)。
总结一下:
你的配置可能没有一些用户期望的所有命令。例如,你可能会错误地检测到某些功能或使用不正确的假设,比如if macOS { use mac commands } else { use linux commands }
,而不是 if gnuTools { use gnu commands } else { use bsd/posix commands }
。