C++:什么时候需要重新编译?

C++: When is the need to recompile problematic?

本文关键字:编译 新编译 什么时候 C++      更新时间:2023-10-16

在什么情况下重新编译代码是有问题的?

我是一个感兴趣的门外汉,没有任何专业的编码经验,试图提高我的理解。我反复使用的文章和书籍处理了某些编码习惯或设计选择的应用会增加需要重新编译程序的可能性的情况。作者显然对此感到担忧,但不幸的是,他们从未明确解释根本问题。

对于任何软件专业人士来说,这个问题显然看起来很愚蠢,但在我私人编码的努力中,没有必要重新编译一个真正的问题。我怀疑这需要一定的背景才能构成现实世界的问题,我恳请任何有经验的软件工程师为无知的人提供启示。

谢谢。


* 例如,斯科特·迈耶的有效C++:关于内联的第 30 项

单主题历史课:

在某些语言中,程序员(具有某些类型的经验)可以了解到,简单地将字段附加到现有消息不会影响现有代码。 任何不使用任何新字段的代码都不需要重新编译。C++并非如此。

同一团队也可能将这些消息捕获到单个"消息"文件中,因为更改一条消息不会影响其他消息,添加新消息只会影响使用它的代码。 同样,C++不是这样。

C++更改 N 条消息文件中单个消息的任何方面(字段名称、大小、字段类型、命名等),将触发包含 N 个消息文件的所有 .cc 文件的重新编译。


在我贡献的一个大型C++项目(我们网站上的 100+ 贡献者)中,清晨的完整构建可能会在大约一个小时内完成。该版本分布在许多处理器上(但由团队共享)。 到中午时,完整构建持续时间通常超过 3 小时。

环境说明:1 到 3 小时的构建时间几乎与共享有限的实验室设备(即注册访问、等待轮到您等)一样痛苦,以调试更改。

在什么情况下需要重新编译代码 问题?

编辑-编译-测试-调试周期持续时间主导着程序员的工作效率。 当这个周期持续时间大/慢时,这是一个问题。

对于大型C++项目,我们学会了在一天结束时合并(其他提交),然后启动一个构建并希望它在早上完成(通常不会)。

在白天(从上午晚些时候到一天结束时),您只构建小更改,调试工作,并推迟将代码"合并"到其他贡献者代码中。 这种努力继续增长。

在白天(清晨之后),您根本无法合并并完成系统的重建以调试您的贡献。

这就是问题所在...交付工作代码是贡献者应该做的。


为了比较:

在我的家庭桌面上,我可以切换窗口并在几分钟内完全重建我最大的项目。我的大多数应用程序周期持续时间<1 分钟。