我是否必须在开发期间每次编译C ++代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我是否必须在开发期间每次编译C ++代码?相关的知识,希望对你有一定的参考价值。

假设我们有一个庞大的代码库,我们正在用C ++进行开发。我们是否必须每次都重新编译才能测试代码?

如果是,那么开发需要很长时间。

这个问题的解决方案是什么?

答案

是的,如果你想测试它,你肯定需要编译C ++代码。没有编译就无法执行C ++代码。

但是,如果您巧妙地组织项目,即使有数千(甚至更多)文件,编译也可能只需几秒钟,或者最多一分钟。

默认情况下,构建系统将运行incremental build,除非您明确请求“重建”或先前执行“清理”。然后它将相应地调用编译器/链接器,并确保它只编译/链接需要的内容(如果cpp文件没有更改,不需要编译它,这都是基于文件时间戳,如果是“对象”文件(生成的)比cpp文件(源代码)旧,构建系统知道它是最新的并且不会再生成它。如果你使用Visual Studio和/或CMake或任何IDE,构建系统,它们都支持那!

此外,您可以遵循一些指导原则来加快速度:

首先,在模块(库)中组织项目,理想情况下使用动态链接。然后,当更改库中的文件时,只需要编译此库(使用修改后的库的其他库或程序不必再次编译)。

当您仅修改实现文件(cpp文件)时,将只需要使用它的模块的此文件+链接。

当您修改头文件(h文件)时,包含它的所有cpp文件都需要重新编译,因此您必须小心优化包含。首选forward declarationsee why here)尽可能包括(否则,你的标题成为所有cpp文件的依赖关系,使用包括你的其他标题文件...作为级联,修改此标题文件将最终需要编译cpp文件的音调)。不要包含您不需要的文件(因为它会在头文件更改时触发新的无用构建)。可能使用precompiled headers来加速编译。

注意:正如评论的那样,显然有一些工具可以用interpret C++ without compiling it ......但这不是C ++第一次设计的。而且我怀疑它们在运行时会像编译代码一样快......所以你可能会节省20秒的增量构建时间,然后在运行时分钟松动......

以上是关于我是否必须在开发期间每次编译C ++代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 npm 命令编译打字稿?

如何避免每次重新编译所有文件?

更改构建 c 编译器

通过命令行编译C / C ++ / Visual C程序

是否可以在 C 中将 char[] 转换为 char*?

如何在scala中自动重新运行sbt项目