如何将 autotools 工件保留在源代码树之外?

How to keep autotools artifacts outside of the source tree?

Autotools 在将 'make' 工件排除在源代码树之外做得很好(确实?),但它会留下自己的碎屑——例如 'configure' 或 'm4' 文件-- 在它来自 运行 的目录中。

我已经采取了将配置文件复制到一次性构建目录的方法,但我开始觉得我想出了一个复杂的 hack 来做一些简单的事情。我希望有人可以通过给我正确的搜索词或更好的方式来提供帮助,但可以提供一个指向使用原始源代码树构建 autotools 的工作示例的指针。

How to keep autotools artifacts outside of the source tree?

你不能。 Autotools 定义 源代码树根植于包含 configure 脚本的目录。或者,如果您从项目维护者的角度来看它,那么包含 configure.ac 的目录也就是 configure 所在的目录。

此外,运行 Autotools 生成的工件旨在包含在项目分发中。我知道将这些排除在修订控制之外的想法最近获得了一些关注,但就网络托管的修订控制系统已成为一种分发机制而言,这种排除是错误的。它阻碍了 Autotools 的主要目标之一:您不需要 Autotools 来构建项目。

即使 Autotools 随时可用,将构建项目与构建其构建系统分离仍然有用,因为 Autotools 在设计上更注重构建可移植构建系统,而不是兼容性Autotools 版本之间。

但是,尽管您不能放置 configure etc。在源代码树之外,如果您决定这样做,您 可以 在通过 make maintainer-clean 构建后相当容易地清理它们。这当然会清除所有构建的组件,而不仅仅是机器生成的构建系统组件。但我建议保留 make distclean 留下的所有内容。