至于这段代码片段:
AM_MAINTAINER_MODE
if test "x$enable_maintainer_mode" = xyes; then
AC_PATH_PROG(PERL,perl)
if test -z "$PERL"; then
AC_MSG_ERROR([perl not found])
fi
fi
# This should be checked before AC_PROG_CC
if test "x$CFLAGS" = x; then
default_CFLAGS=yes
fi
if test "x$host_cpu" = xx86_64; then
CFLAGS="-m32 $CFLAGS"
fi
我找不到有关正在测试的三个变量(x$enable_maintainer_mode、x$CFLAGS、x$host_cpu)的任何信息。这些变量是在执行宏 AM_MAINTAINER_MODE 后生成的吗?如果是这样,我在哪里可以找到有关它们的更多信息?
另外,AM_MAINTAINER_MODE 模式的目的是什么?
据我了解,默认情况下它是禁用的:
- 如果用户运行“配置”并且不满足所有依赖项(Automake 版本、工具、库等),它将终止并且不会继续进行。
- 如果用户运行“configure”并且满足所有依赖项,它将创建并运行生成“make”文件的 config.status 脚本
- 用户可以使用 –enable-maintainer-mode 选项覆盖此设置。这将允许他们修改不同的 Autotool 文件(例如 configure.ac、Makefile.am),并且构建系统将尝试重新生成需要更新的文件以反映这些更改(Autotools 将查找任何过时的文件并更新它们因此)。
我明白为什么禁用此模式可能更可取。您为什么要启用此功能的任何原因?
背后的总体思路
AM_MAINTAINER_MODE
是两种处理项目的方式:一种是用户“仅”想要构建和安装项目(使用基于源代码的工件进行安装),并且可能在不触及其构建的情况下更改项目代码系统,另一个是用户希望在项目的任何地方所做的任何更改都反映在构建输出中。因此,当
AM_MAINTAINER_MODE
禁用时,即使相应的源文件( 等)发生更改,也不会重建等文件configure
。这样做的假定优点是它避免了要求用户拥有必要的构建工具,并且避免了必须自己处理工具的更改(询问任何试图使用当前的自动工具重建旧的、复杂的项目的人)。缺点是对某些文件所做的更改会被忽略,因此用户需要确保所有适当的文件都已手动更新...(这就是为什么您在 Internet 上看到的许多补丁都包含更改的原因之一,有时甚至.)Makefile.in
configure.ac
Makefile.am
Makefile.am
Makefile.in
Makefile
启用的优点
AM_MAINTAINER_MODE
是考虑到对文件所做的所有更改。缺点是用户需要知道真正的源文件是什么:如果您在Makefile.in
维护者模式下进行更改和重建,您可能会丢失更改!现在的普遍共识似乎是从真实源重建更好,而维护者模式并不是一个好主意。(automake 常见问题解答提供了参考。)这并不意味着所有用户突然需要拥有重建一切所需的所有工具;如果项目在其发布工件中发送生成的文件,只要时间戳正确,用户就不需要重建它们。
此处的变量是 shell 变量,其中添加了一个“x”。
当您将选项 --enable-maintainer-mode 传递给配置时,x$enable_maintainer_mode 将设置为 xyes,当您将选项 --disable-maintainer-mode 传递给配置时,x$enable_maintainer_mode 将设置为 xno。否则,变量将为“x”。
变量 CFLAGS 可以通过 ./configure CFLAGS='compiler flag options' 设置。否则,如果未设置任何内容,则 default_CFLAGS=yes。x$host_cpu 可以从 AC_CANONICAL_HOST 宏中获取。这是 host_cpu 和 AC_CANONICAL_HOST 宏调用的相关链接。