Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 项目能否同时支持Autotools和Cmake?_Makefile_Cmake_Autotools_Release Management_Os Agnostic - Fatal编程技术网

Makefile 项目能否同时支持Autotools和Cmake?

Makefile 项目能否同时支持Autotools和Cmake?,makefile,cmake,autotools,release-management,os-agnostic,Makefile,Cmake,Autotools,Release Management,Os Agnostic,我碰巧认为(但可能是一个神话)Cmake比Autotools更能让支持微软变得容易 同时,我有点确信,对于重要的UNIX衍生产品,如macOS和最流行的Linux发行版,Autotools甚至比Cmake更直接 如果我不能选择怎么办 项目能否同时支持Autotools和Cmake 奖励:项目能否同时支持Autotools和Cmake,甚至简单地裸制 通过“同时”我的意思是,理想情况下,当从一个构建系统切换到另一个构建系统时,不必运行干净的脚本。但如果必要的话,我想这将是一个合理的配置 最后,您知

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

同时,我有点确信,对于重要的UNIX衍生产品,如macOS和最流行的Linux发行版,Autotools甚至比Cmake更直接

如果我不能选择怎么办

项目能否同时支持AutotoolsCmake


奖励:项目能否同时支持AutotoolsCmake,甚至简单地裸制

通过“同时”我的意思是,理想情况下,当从一个构建系统切换到另一个构建系统时,不必运行干净的脚本。但如果必要的话,我想这将是一个合理的配置


最后,您知道一个同时使用Autotools和Cmake的示例项目吗?同时使用自动工具、Cmake和simply bare Make的工具?

是的,您可以很容易地同时支持Cmake和Autotool,因为它们不重叠(也就是说,用于创建这些环境的文件不同,因此您可以在项目中同时使用这两种类型的文件)。这方面的一个例子是

不,您不能(轻松地)同时支持bare make和上述任何一个系统。Autotools和CMake实际上都不是构建工具本身。它们是“构建工具生成器”。因此,您不运行autotools或cmake,结果是生成项目:而是运行autotools或cmake,它们为生成工具生成控制文件。然后运行构建工具,结果就是构建的项目

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

因此,您的项目中不能有自己的makefile,因为它们会与autotools或cmake生成的makefile冲突

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

现实地说,我永远不会选择支持上述选项中的一个以上。您将花费大量的时间使其正确,每次您需要更改构建环境时,所做的工作都是原来的两到三倍。人们会发现其中任何一个问题,你倾向于使用较少。这是一个巨大的麻烦,没有那么多的好处

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


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

“一个项目可以同时支持Autotools和Cmake,甚至是简单的裸机制作吗?”-当然,为什么不呢?您只需要为每个工具编写相应的脚本。是同时支持autotools和cmake的代码库的一个示例。如果您的目标是在windows上使用MSVC的visual studio,我也同意cmake对windows更友好。如果您的目标是在windows上安装gcc的msys、mingw或cygwin。。。嗯。在这一点上,它只是归结为偏好。不过,请注意如何引入依赖项,因为windows上的cmake不附带pkgconfig,这意味着“find_package”可能不起作用。我确实有时看到同时具有Autotool和cmake构建系统的项目,但这通常是因为它们从一个系统开始,然后决定转换到另一个系统。有时这是因为他们已经转换,但没有清理他们的混乱——这些可能很棘手,因为你要在两者之间做出特别的选择,你需要阅读文档(喘息!)以确保选择正确。这很好,我接受。只有一条评论:autotools在理论上非常简单(我曾经对一个cmake项目进行过autotools…),所以对于cmake项目来说,它几乎没有开销。有趣的是,这是在macOS上。所以多目标cmake在实践中很难忍受,有时autotools甚至在可移植性方面胜过cmake。当然,除非微软出于某种原因被排除在这一组合之外。你好@Madscitist,回答得好。我编辑了一个示例项目的链接,该项目同时支持autotools和cmake,因为示例是OP中的问题之一。如果您不同意我的编辑,请随时回滚。