2

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

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

如果我不能选择怎么办?

一个项目可以同时支持 AutotoolsCmake吗?

奖励:一个项目可以同时支持 AutotoolsCmake甚至简单的 Make吗?

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

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

4

1 回答 1

3

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

不,您不能(轻松)同时支持裸机和上述任一系统。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 可能是一个不错的选择。

于 2019-06-08T13:49:54.893 回答