c++ - 特定目标文件的单线程构建
问题描述
我在一个非常大的 C++ 项目上工作,在启用所有内核的情况下完全构建需要 20-30 分钟。问题是有一些非常具体的源文件会占用大量内存来构建(大约 5 GB),所以发生的情况是,每当构建到达这些源文件并尝试同时构建它们时,内存使用量猛增,如果机器没有足够的内存,系统就会开始交换并且编译会大大减慢。但是,如果我尝试减少线程数量,编译运行时间最终可能会达到几个小时或更长时间——而且大多数源文件实际上并不需要那么多内存来编译。
理想的情况是:继续进行多进程编译,然后在有问题的文件开始编译后退回到单个编译进程。那么我如何告诉 CMake 我希望在没有任何其他并行编译的情况下编译特定的源文件?
编辑:链接很好,在编译有问题的源 cpp 文件时会发生内存峰值。
解决方案
如果您找不到 cmake 标志,另一种解决方案。
我有一个类似的问题,我使用了一个名为 distcc 的工具来解决这个问题。
对于许多较小项目的编译时间,您不会看到太多好处,但是听起来您的负载模式非常适合分布在一组构建工作人员上。
但是,它是链接器的瓶颈,您的里程会有所不同。
单元/模块,而不是一个大型的单片 C 程序,或扩大规模(给你的机器更多的内存)。
https://github.com/distcc/distcc
distcc 不适用于所有类型的项目,但是您的声音足够大,以至于通过网络分发它是值得的。
如果您确实尝试过,请发布一些编译时间!我很想看看有什么不同。
祝你好运!
推荐阅读
- java - 使用 Spring Boot 从不同的微服务存储/检索相同的缓存对象
- python - 如何在 Python 中求解矩阵值 ODE?
- php - PHP 问题将 file_put_contents 替换为 fopen fwrite fclose 并读取
- c# - unity c#,无法从另一个脚本访问变量
- amazon-web-services - 在使用 aws s3 失败后重试重新下载
- reactjs - useContext 不适用于嵌套组件
- android - 同一活动中不同可组合功能的不同视图模型
- bash - 查找具有给定名称的目录的路径
- c - 当使用 SIGINT 之类的信号中断 C 程序时会发生什么?
- mysql - mysql如何捕捉更新语句是否执行成功