【问题标题】:Can a project support both Autotools and Cmake at the same time?一个项目可以同时支持 Autotools 和 Cmake 吗?
【发布时间】:2019-10-23 16:09:47
【问题描述】:

我碰巧认为(但可能是一个神话)Cmake 比 Autotools 更容易支持微软。

同时,在涉及到重要 UNIX 衍生产品(例如 macOS 和最流行的 Linux 发行版)时,我有点确信 Autotools 比 Cmake 更简单。

如果我不能选择怎么办?

项目能否同时支持 Autotools Cmake

奖励:一个项目能否同时支持 Autotools Cmake 甚至简单地同时同时支持 Make

“同时”是指理想情​​况下,从尝试其中一种构建系统更改为另一种构建系统时,不一定要运行干净的脚本。但如果有必要,我想这将是一个合理的配置。

最后,你知道一个同时使用 Autotools 和 Cmake 的示例项目吗?一个同时使用 Autotools、Cmake 和简单 Make 的工具?

【问题讨论】:

  • "一个项目可以同时支持 Autotools 和 Cmake 甚至是简单的 Make 吗?" - 当然,为什么不呢?您只需要为每个工具编写相应的脚本即可。
  • GNU uCommon C++ framework 是一个同时支持 autotools 和 cmake 的代码库示例。
  • 我也同意 cmake 对 windows 更友好,如果你的目标是在 windows 上使用 MSVC 的 Visual Studio。如果您在 Windows 上使用 gcc 以 msys、mingw 或 cygwin 为目标... ehhhh。在这一点上,它只是归结为偏好。不过要注意如何引入依赖项,因为 Windows 上的 cmake 不附带 pkgconfig,这意味着“find_package”可能不起作用。

标签: makefile cmake autotools release-management os-agnostic


【解决方案1】:

是的,您可以非常轻松地同时支持 CMake 和 Autotools,因为它们不会重叠(也就是说,您用于创建这些环境的文件是不同的,因此您可以在您的同时进行项目)。 GNU uCommon C++ framework 就是一个例子。

不,您不能(轻松)同时支持裸机和上述任一系统。 Autotools 和 CMake 本身都不是构建工具。它们是“构建工具生成器”。因此,您无需运行 autotools 或 cmake,结果就是您构建的项目:相反,您运行 autotools 或 cmake,它们会为构建工具生成控制文件。然后你运行构建工具,结果就是你构建的项目。

Autotools 生成 makefile,cmake 生成许多不同类型的控制文件,其中 makefile 是最常见的一种。

所以,你的项目中不能有你的 OWN makefile,因为它们会与 autotools 或 cmake 生成的 makefile 冲突。

当然,您可以将自己的 makefile 放在子目录中,然后使用 make -f rawmake/makefile 之类的参数调用 make。但是没有方便的方法来支持它们。

实际上,我永远不会选择支持以上选项之一。您将花费 很多 时间来正确处理它,而每次您需要更改构建环境时,工作量会增加两到三倍。人们会发现您倾向于不经常使用的任何一个问题。没有那么多好处,这是一个巨大的麻烦。

您选择哪一种很大程度上取决于您的项目。如果您的项目仅(或几乎完全)在 POSIX 类型的系统上运行,您希望它最大程度地可移植到更旧的系统,即使它使用许多特殊的操作系统功能,或者您希望它的安装和构建选项非常灵活(直接支持交叉编译等),那么 autotools 是一个不错的选择。如果您的项目在许多不同的操作系统类型(尤其是 Windows)上运行,并且您希望人们能够轻松地使用他们选择的 IDE(Visual Studio、Xcode 等)进行开发,那么 cmake 是一个不错的选择。

如果您的程序易于构建并且几乎不需要任何配置或自定义,或者您已经熟悉 makefile 并且不想仅仅为了构建而学习一门全新的语言,那么原始 makefile 可能是一个不错的选择。

【讨论】:

  • 我确实有时会看到同时具有 Autotools 和 CMake 构建系统的项目,但这通常是因为他们从一个开始并决定过渡到另一个。有时是因为他们已经过渡了,但没有清理他们的烂摊子——这些可能很棘手,因为您要在两者之间做出特定选择,并且您需要阅读文档(喘气!) 确保选择正确。
  • 这很好,我会接受。只有一条评论:从理论上讲,autotools 是如此精简(我曾经对一个 cmake 项目进行过自动工具......),以至于对于 cmake 项目来说,它几乎没有开销。有趣的是,那是在 macOS 上。因此,多目标 cmake 在实践中很难忍受,有时 autotools 甚至在可移植性方面都胜过 cmake。当然,前提是微软可以出于某种原因被排除在外。
  • 你好@madscientist,很好的答案。我已经编辑了一个示例项目的链接,该项目同时支持 autotools 和 cmake,因为示例是 OP 中的问题之一。如果您不同意我的编辑,请随时回滚。
猜你喜欢
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多