首页 > 解决方案 > 特定目标文件的单线程构建

问题描述

我在一个非常大的 C++ 项目上工作,在启用所有内核的情况下完全构建需要 20-30 分钟。问题是有一些非常具体的源文件会占用大量内存来构建(大约 5 GB),所以发生的情况是,每当构建到达这些源文件并尝试同时构建它们时,内存使用量猛增,如果机器没有足够的内存,系统就会开始交换并且编译会大大减慢。但是,如果我尝试减少线程数量,编译运行时间最终可能会达到几个小时或更长时间——而且大多数源文件实际上并不需要那么多内存来编译。

理想的情况是:继续进行多进程编译,然后在有问题的文件开始编译后退回到单个编译进程。那么我如何告诉 CMake 我希望在没有任何其他并行编译的情况下编译特定的源文件?

编辑:链接很好,在编译有问题的源 cpp 文件时会发生内存峰值。

标签: c++linuxgcccmake

解决方案


如果您找不到 cmake 标志,另一种解决方案。

我有一个类似的问题,我使用了一个名为 distcc 的工具来解决这个问题。

对于许多较小项目的编译时间,您不会看到太多好处,但是听起来您的负载模式非常适合分布在一组构建工作人员上。

但是,它是链接器的瓶颈,您的里程会有所不同。

单元/模块,而不是一个大型的单片 C 程序,或扩大规模(给你的机器更多的内存)。

https://github.com/distcc/distcc

distcc 不适用于所有类型的项目,但是您的声音足够大,以至于通过网络分发它是值得的。

如果您确实尝试过,请发布一些编译时间!我很想看看有什么不同。

祝你好运!


推荐阅读