【发布时间】:2021-12-24 08:27:03
【问题描述】:
Autotools 将“make”工件排除在源代码树之外做得很好(是吗?),但它会在运行它的目录中留下自己的碎片——例如“configure”或“m4”文件.
我已经采取了将配置文件复制到一次性构建目录的方式,但我开始觉得我想出了一个复杂的技巧来做一些简单的事情。我希望有人可以通过给我正确的搜索词或更好的指向使用原始源代码树的自动工具构建的工作示例来提供帮助。
【问题讨论】:
Autotools 将“make”工件排除在源代码树之外做得很好(是吗?),但它会在运行它的目录中留下自己的碎片——例如“configure”或“m4”文件.
我已经采取了将配置文件复制到一次性构建目录的方式,但我开始觉得我想出了一个复杂的技巧来做一些简单的事情。我希望有人可以通过给我正确的搜索词或更好的指向使用原始源代码树的自动工具构建的工作示例来提供帮助。
【问题讨论】:
如何将 autotools 工件保留在源代码树之外?
你不能。 Autotools 定义源代码树以包含configure 脚本的目录为根。或者,如果您是从项目维护者的角度来看它,那么包含 configure.ac 的目录,也就是 configure 所在的位置。
此外,通过运行 Autotools 生成的工件旨在包含在项目分发中。我知道将这些从修订控制中排除的想法最近获得了一些关注,但在网络托管的修订控制系统已成为一种分发机制的范围内,这种排除是错误的。它阻碍了 Autotools 的主要目标之一:您无需拥有 Autotools 即可构建项目。
即使 Autotools 很容易获得,将构建项目与构建其构建系统分离仍然很有用,因为 Autotools - 在设计上 - 更多地关注构建便携式构建系统,而不是 Autotools 之间的兼容性版本。
但是,尽管您不能输入configure etc。在源代码树之外,您可以在构建后通过make maintainer-clean 很容易地清理它们,如果您决定这样做的话。这当然会清理所有构建的组件,而不仅仅是机器生成的构建系统组件。但我建议保留 make distclean 留下的所有内容。
【讨论】:
configure 生成并由make distclean 清理。不需要 Autotools 进行构建意味着您不需要 Autoconf、Automake、Libtool 或它们的支持包。您必须保留它们的输出,包括 configure、Makefile.in 文件、config.h.in 和类似的,但不能保留由 configure 或 make 生成的任何内容。这是项目维护者责任和项目构建责任之间的界限。