【问题标题】:How to reduce compilation cost in GCC and make?如何降低 GCC 和 make 中的编译成本?
【发布时间】:2016-02-09 01:24:59
【问题描述】:

我正在尝试构建一些大型库,例如BoostOpenCV,它们的源代码通过makeGCC 在我的笔记本电脑上的Ubuntu 8.10 下。不幸的是,这些大型库的编译对我的笔记本电脑来说似乎是一个很大的负担(Acer Aspire5000)。它的风扇发出越来越高的噪音,直到我的笔记本电脑突然自行关闭,而操作系统没有正常关闭。

所以我想知道在make和GCC的情况下如何降低编译成本?

我不介意编译是否需要更长的时间或更多的空间,只要它可以在我的笔记本电脑不关机的情况下完成。

由于没有优化,构建库的调试版本是否总是比构建发布版本的成本更低?

一般来说,是否可以只指定要安装的库的某些部分而不是完整的库?如果以后发现需要,可以构建并添加其余部分吗?

如果我重新启动笔记本电脑,我可以从笔记本电脑自行关闭时的位置恢复编译,这是否正确?例如,通过查看在编译期间显示的进度百分比不会从 0% 重新启动,我注意到 OpenCV 确实如此。但我不确定 Boost,因为没有明显的信息可以告诉我,而且编译似乎需要更长的时间。


更新:

谢谢,brianegge 和 Levy Chen!如何使用 GCC 和/或 g++ 的包装脚本?就像为 GCC 或 g++ 定义一些别名一样吗?如何调用脚本检查传感器并等到 CPU 温度下降后再继续?

【问题讨论】:

  • 有趣的是,真正的问题在于您的笔记本电脑无法全速运行。
  • 真正的解决方案可能是将您的笔记本电脑升级到 SSD。它们更酷。

标签: linux gcc makefile


【解决方案1】:

我建议为 gcc 和/或 g++ 创建一个包装脚本

#!/bin/bash
sleep 10
exec gcc "$@"

把上面的另存为“gccslow”什么的,然后:

export CC="gccslow"

或者,您可以调用脚本 gcc 并将其放在路径的前面。如果这样做,请确保在脚本中包含完整路径,否则,脚本将递归调用自身。

更好的实现可以调用脚本来检查传感器并等到 CPU 温度下降后再继续。

【讨论】:

  • 这是一个聪明的解决方案。最初,我正在考虑使用nice,但它没有帮助,因为无论如何CPU都会一直忙。
  • 谢谢,布里亚内格!您如何使用 gcc 和/或 g++ 的包装脚本?就像为 gcc 或 g++ 定义一些别名一样吗?如何调用脚本检查传感器并等到 CPU 温度下降后再继续?
【解决方案2】:

对于您的后一个问题:编写良好的 Makefile 会将依赖项定义为 directed a-cyclical graph (DAG),并且它将尝试通过根据 DAG 的顺序编译它们来满足这些依赖项。因此,当一个文件被编译时,依赖关系得到满足,不需要再次编译。

然而,它可以是tricky to write good Makefiles,因此有时作者会采用蛮力方法,从头开始重新编译所有内容。

对于您的问题,对于此类知名库,我将假设 Makefile 已正确编写,并且构建应从上次操作恢复(需要注意的是它需要重新扫描 DAG,并重新计算编译顺序,应该相对便宜)。

【讨论】:

  • Boost 使用自己的机制 (bjam)。
【解决方案3】:

您可以单独编译每个目标,而不是编译整个东西。您必须检查 Makefile 才能识别它们。

诙谐:编译时将笔记本电脑放入冰箱怎么样?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多