【发布时间】:2023-03-28 14:56:02
【问题描述】:
如果有一个相对较大的项目完全使用Makefiles 构建,是否可以将make 替换为cmake?大家都强调cmake更容易支持跨平台开发,但万一目标平台只是其中之一,没有计划改变它。在这种特殊情况下,cmake 会给我带来什么好处?
【问题讨论】:
-
这不是在“非常简单的单平台案例”中询问 CMake 优于 Make 的第一次尝试。实际上,CMake 提供的不仅仅是多平台开发。您可以列出 CMake 的任何优点,并从中消除一点。
-
嗯,cmake 会生成 makefile。所以cmake所做的一切,都可以在makefile中完成。反过来并不总是正确的:在 makefile 中做一些非常琐碎的事情在 cmake 中却很难做。 cmake 为您做了很多事情,因此您不必编写复杂的 makefile——但您的已经编写好了。对于已经在 makefile 中实现的项目,您需要问自己希望通过切换获得什么。如果您的 makefile 可以满足您的要求并且可靠,那么转换它们只是浪费精力。如果他们有问题,也许 cmake 会有所帮助。
-
@MadScientist “嗯,cmake 会生成 makefile。所以 cmake 所做的一切都可以在 makefile 中完成。” 这个推理有缺陷,原因很简单:cmake 生成的 makefile包括对 cmake 命令行工具的调用,这意味着可能涉及的功能可能在 makefile 中不可用,除非您的系统上安装了 cmake。
-
@fabian 理论上是这样,但实际上并非如此。 cmake 调用只是为了提供某种程度的操作系统抽象:删除文件、创建目录等。请参阅
cmake -E --help的输出以查看 cmake 生成的 makefile 可能调用的操作。