是的,您可以非常轻松地同时支持 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 可能是一个不错的选择。