我一直在开发一个使用 Ninja 作为构建系统的项目,但我在构建过程中遇到了内存问题(无论我增加多少内存,Ninja 都会耗尽所有可用内存)。我正在考虑切换到不同的构建系统,例如 Unix Makefiles。然而,我想避免从头开始重建所有内容,以节省时间和资源,特别是我原来的 2000 多个文件只剩下 400 个左右。有办法做到这一点吗?
用谷歌搜索了这个问题,问了gemini和chatgpt,不断增加内存,直到我的虚拟机达到14GB(笔记本电脑有16GB)。
如果您真的使用 cmake,您的问题的答案是“不,结果不会被重用”。但这与 ninja 或 make 本身并没有真正的关系,它与 cmake 以及 cmake 生成的 ninja 文件有关,这些文件处理构建的方式与它生成的 makefile 不同。
cmake 生成的 makefile 包含创建
.d
文件的规则,其中包含每个目标文件的先决条件(标头)。如果目标文件丢失,生成的 makefile 中的 makefile 规则将认为目标文件已过期。
cmake 生成的 ninja 文件不会创建
.d
文件。
因此,如果您使用 Ninja 构建了一半的项目,然后切换到 makefile,则
.d
文件丢失,make 将重建所有内容,以便生成 .d
文件。
我知道没有办法解决这个问题。