Linux 是不是有更快的 c++ 编译器?

Posted

技术标签:

【中文标题】Linux 是不是有更快的 c++ 编译器?【英文标题】:Is there a faster c++ compiler for Linux?Linux 是否有更快的 c++ 编译器? 【发布时间】:2011-06-13 19:03:05 【问题描述】:

在 C 语言中,我可以使用 tcc,但我无法为 c++ 找到任何东西。

在 Eclipse 中使用 Gcc 更改的单个 .cpp 文件需要大约 5 秒才能重新编译,这太荒谬了。我不关心代码如何执行,我只需要更快的测试周期。

有什么想法可以让代码编译得更快吗?

【问题讨论】:

有多少开销是由 Eclipse 造成的?我自己从未将它用于 C++,但从一位同事看来,Eclipse 为 C++ 编译增加了相当多的开销。此外,编译需要多少时间,链接需要多少时间?您是否可以减少标头使用并将代码拆分为更多单独的编译单元? 阅读***.com/questions/58841/precompiled-headers-with-gcc 了解预编译头文件。这可能会有所帮助 要查看编译器性能,请从命令行运行它。 Eclipse 超级慢(Java...) 用命令行编译会更快,你也可以通过设置这个环境变量来启用编译器缓存:USE_CCACHE=1它会让你的编译速度更快到40% Clang 明显比 gcc 快,试试吧。 【参考方案1】:

对于我不太快的笔记本电脑上的 50 行文件,从命令行使用 g++ 的编译时间约为 1.5 秒 - 显然这取决于许多其他因素,例如包含哪些标头。对于用 C++ 编写的Code::Blocks IDE,相同文件的编译(或者更准确地说,报告编译结果)可能是两倍。用 Java 编写的 IDE 甚至更慢,我并不感到惊讶。

【讨论】:

【参考方案2】:

查看clang

【讨论】:

@Blub:既然您接受了这个答案,您能否评论一下您从(大概)使用 Eclipse 中的 clang 而不是 gcc 看到了多少改进?谢谢! @timday:我接受了它,因为它最符合这个问题。我最终做的是使用 QtCreator。它是同一个编译器,但是我的编译时间已经减少到大约 2 秒,而不是 Eclipse 的 5 秒。现在对我来说已经足够好了。使用 Eclipse 设置 Clang 目前仍处于试验阶段,我不想使用 alpha 软件。【参考方案3】:

Eclipse 占用了如此多的 RAM,当您的操作系统也必须运行编译器时,它也不太可能开始交换。

【讨论】:

【参考方案4】:

2018 年有一个基于 clang 的编译器,名为 zapcc。由于缓存,它在第一次构建时至少快 2 倍,在重建时快 20 倍以上。

但是,它比 gcc 或 clang 需要更多的内存。

【讨论】:

【参考方案5】:

可能是一种解决方法,可能是将 C++ 项目划分为子组件并以某种高优化级别编译整个项目。然后,在开发过程中,使用 GCC/LLVM 标志 -O0(字母“o”和数字“零”)只重新编译没有优化的部分。

这种解决方案的关键部分是良好的构建系统。截至 2015 年,我使用 Rake,它是 GNU Make 的 Ruby 类似物。 Rakefile 是一个普通的 Ruby 文件,它只加载一个 Rake 特定的库。 Rake 任务本质上是全局 Ruby 函数,这意味着可以用 Ruby 编写的任何内容都可以从 Rake 任务中执行。截至 2015 年,我使用 Rake 任务开始自测、开始特定组件的测试(在“测试驱动开发”期间)、构建、代码生成等。

截至 2015 年,企业 Java 世界似乎喜欢 Gradle,它是 Apache Maven 的继任者,Apache Ant 的继任者。 开源科学 C++ 软件项目似乎发现CMake 实用。 Boost C++ 库似乎提供了Boost.Build。

在多核 CPU 上,如果经典 GNU Make 接收到-j 命令行选项,它可以并行构建多个文件。

【讨论】:

以上是关于Linux 是不是有更快的 c++ 编译器?的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper支持c++吗

一行代码就能让 Python 可以比 C++ 更快,你不信?

C++ 重构内联 Double 以获得更快的代码 PolyBelp

如何在linux/ubuntu下编写c++网络通信代码

嵌入式 Linux 中的 C 与 C++

控制台应用程序比 GUI 应用程序运行得更快吗? [关闭]