在开发过程中,我是否必须每次重新编译C++代码?
Do I have to recompile C++ code everytime during development?
假设我们有一个庞大的代码库,我们正在C++进行开发。我们是否必须每次都重新编译才能测试代码?
如果是,那么进行开发将需要很长时间。
这个问题的解决方案是什么?
是的,如果你想测试它,你肯定需要编译C++代码。C++代码如果不经过编译就无法执行。
但是,如果您巧妙地组织项目,即使有数千个(甚至更多)文件,编译也只需几秒钟,甚至可能长达一分钟。
默认情况下,您的构建系统将运行增量构建,除非您之前明确请求"重建"或执行了"清理"。然后,它将相应地调用编译器/链接器,并确保它只编译/链接需要的内容(如果 cpp 文件没有更改,则无需编译它,这完全基于文件时间戳,如果"对象"文件(生成)早于 cpp 文件(源),构建系统知道它是最新的并且不会再次生成它。如果你使用Visual Studio和/或CMake或任何IDE,构建系统,它们都支持!
此外,您可以遵循一些准则来加快此操作:
首先,在模块(库)中组织您的项目,最好使用动态链接。然后,当库中的文件发生更改时,只需要编译此库(使用修改后的库的其他库或程序不必再次编译)。
当您仅修改实现文件(cpp 文件)时,只需要此文件 + 使用它的模块的链接。
当您修改头文件(h 文件)时,需要重新编译包含它的所有 cpp 文件,因此您必须小心优化您的包含。更喜欢前向声明(在此处查看原因)以尽可能包含(否则,您的标头将成为使用其他头文件(包括您的头文件)的所有 cpp 文件的依赖项......作为级联,修改此头文件最终将需要编译 CPP 文件的音调)。不要包含不需要的文件(因为它会在头文件更改时触发新的无用构建)。可能使用预编译标头来加速编译。
注意:正如评论的那样,显然有一些工具可以在不编译的情况下解释C++......但这不是C++最初设计的目的。而且我怀疑它们在运行时会像编译代码一样快......因此,您可能会节省 20 秒的增量构建时间,然后在运行时节省几分钟的时间。
- 使用 MINGW gcc 编译时,不会为 std::string 调用重载的新运算符
- 如何编译:Mac上的Synergy(2017年的新工具链)
- 如何编译和运行一个新的 C++ Actor 框架项目?
- C++编译新的警告过滤器
- 每次都构建(make)lib,只有在lib较新时才重新编译项目
- 如何创建指向派生类的新指针,该派生类在C++编译时未知
- 如何在不退出和失去断点的情况下重新加载重新编译的二进制文件
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- C++运算符新重载、编译错误
- 在新OSX上编译旧碳应用
- 代码块在尝试编译或创建新文件时出现"An assertion failed!"错误
- 在新的Visual Studio项目中包含任何Eigen 3.3.1文件将无法编译
- RCpp:如何在不重新启动R的情况下重新加载重新编译的C++代码
- 新安装的MinGW问题与编译和可执行文件
- 重新编译二进制类或派生类,以便在基类中添加新方法
- 添加新库以编译任何术语.如何编辑生成文件
- C++,如果其他新文件出现问题,使用g++进行编译可以很好地工作
- 每次添加新的源子文件夹时,Cmake都会重新编译所有内容
- 不完整类型的新内容在包装在模板中时编译
- 使用新的 Qt5 信号/插槽机制连接 QTcpSocket::error() 时编译错误