开发过程中每次都需要重新编译C++代码吗?

Ama*_*sal 3 c++ gcc g++ clang llvm-clang

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

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

这个问题的解决办法是什么?

jpo*_*o38 6

是的,如果您想测试 C++ 代码,您肯定需要编译它。C++代码不经过编译就无法执行。

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

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

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

首先,以模块(库)的形式组织您的项目,最好使用动态链接。然后,当更改库中的文件时,只需编译该库(其他库或使用修改后的库的程序将不必再次编译)。

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

当您修改头文件(h 文件)时,包括它在内的所有 cpp 文件都需要重新编译,因此您必须小心优化您的包含文件。首选前向声明请参阅此处的原因)尽可能包含(否则,您的头文件将成为使用其他头文件(包括您的头文件)的所有 cpp 文件的依赖项...作为级联,修改此头文件最终将需要编译音调cpp 文件)。不要包含不需要的文件(因为当头文件更改时它将触发新的无用构建)。可能使用预编译头来加速编译。

注意:正如所评论的,显然有一些工具可以解释 C++ 而无需编译它......但这不是 C++ 最初设计的目的。我怀疑它们在运行时会像编译后的代码一样快......所以你可能会节省 20 秒的增量构建时间,然后在运行时节省几分钟......

  • > “C++ 代码未经编译就无法执行。” 好吧,严格来说,解释 C++ 程序是可能的,并且有一些工具可以实现这一点:/sf/ask/4867761/ 。并不是说它们在 C++ 开发中很受欢迎。 (2认同)