C++:什么时候需要重新编译?
C++: When is the need to recompile problematic?
在什么情况下重新编译代码是有问题的?
我是一个感兴趣的门外汉,没有任何专业的编码经验,试图提高我的理解。我反复使用的文章和书籍处理了某些编码习惯或设计选择的应用会增加需要重新编译程序的可能性的情况。作者显然对此感到担忧,但不幸的是,他们从未明确解释根本问题。
对于任何软件专业人士来说,这个问题显然看起来很愚蠢,但在我私人编码的努力中,没有必要重新编译一个真正的问题。我怀疑这需要一定的背景才能构成现实世界的问题,我恳请任何有经验的软件工程师为无知的人提供启示。
谢谢。
* 例如,斯科特·迈耶的有效C++:关于内联的第 30 项
单主题历史课:
在某些语言中,程序员(具有某些类型的经验)可以了解到,简单地将字段附加到现有消息不会影响现有代码。 任何不使用任何新字段的代码都不需要重新编译。C++并非如此。
同一团队也可能将这些消息捕获到单个"消息"文件中,因为更改一条消息不会影响其他消息,添加新消息只会影响使用它的代码。 同样,C++不是这样。
C++更改 N 条消息文件中单个消息的任何方面(字段名称、大小、字段类型、命名等),将触发包含 N 个消息文件的所有 .cc 文件的重新编译。
在我贡献的一个大型C++项目(我们网站上的 100+ 贡献者)中,清晨的完整构建可能会在大约一个小时内完成。该版本分布在许多处理器上(但由团队共享)。 到中午时,完整构建持续时间通常超过 3 小时。
环境说明:1 到 3 小时的构建时间几乎与共享有限的实验室设备(即注册访问、等待轮到您等)一样痛苦,以调试更改。
在什么情况下需要重新编译代码 问题?
编辑-编译-测试-调试周期持续时间主导着程序员的工作效率。 当这个周期持续时间大/慢时,这是一个问题。
对于大型C++项目,我们学会了在一天结束时合并(其他提交),然后启动一个构建并希望它在早上完成(通常不会)。
在白天(从上午晚些时候到一天结束时),您只构建小更改,调试工作,并推迟将代码"合并"到其他贡献者代码中。 这种努力继续增长。
在白天(清晨之后),您根本无法合并并完成系统的重建以调试您的贡献。
这就是问题所在...交付工作代码是贡献者应该做的。
为了比较:
在我的家庭桌面上,我可以切换窗口并在几分钟内完全重建我最大的项目。我的大多数应用程序周期持续时间<1 分钟。
- 使用 MINGW gcc 编译时,不会为 std::string 调用重载的新运算符
- 如何编译:Mac上的Synergy(2017年的新工具链)
- 如何编译和运行一个新的 C++ Actor 框架项目?
- C++编译新的警告过滤器
- 每次都构建(make)lib,只有在lib较新时才重新编译项目
- 如何创建指向派生类的新指针,该派生类在C++编译时未知
- 如何在不退出和失去断点的情况下重新加载重新编译的二进制文件
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- C++运算符新重载、编译错误
- 在新OSX上编译旧碳应用
- 为什么G 5.4不能编译此编译时质数代码
- 代码块在尝试编译或创建新文件时出现"An assertion failed!"错误
- 在新的Visual Studio项目中包含任何Eigen 3.3.1文件将无法编译
- RCpp:如何在不重新启动R的情况下重新加载重新编译的C++代码
- 新安装的MinGW问题与编译和可执行文件
- 为什么要编译?(编译是否忽略未包含的 h 文件?
- 高级C和C++编译:无法编译书中提到的示例程序
- 在不同的编译单元中使用不同的编译标志编译相同的头
- 在cygwin中编译新的mingw二进制文件
- 使用boost库编译预编译头文件需要很长时间