Borland C ++ Builder 6始终编译所有文件
为什么C ++ Builder 6总是编译所有文件?
我对一个文件进行了一些更改,但是当我启动该应用程序时,BCB 6会编译所有文件。任何的想法?我使用Windows XP SP2.
解决方案
源文件和二进制对象是否位于同一台计算机上?如果听起来不是这样,则可能是网络时间同步问题。
如果它们很可能是头文件问题,则说明编译器的包含文件在将来的某个时间具有修改的日期,或者应用程序依赖于某些在编译过程中发生更改的头文件,例如从COM导入。
编辑:检查设置VS是否有始终重新编译的标志,这对于BCB可能也是如此,如果设置了该标志则将其取消设置。另一种可能性是预编译的标头未正确配置为在每个源文件上生成。
我不熟悉BCB 6,无法给出更准确的答案。
尝试使用此插件进行BCB编译器:
Bcc32Pch IDE插件
除非需要,否则请确保使用的是" make"命令,而不是" build"命令。
使用Borland工具进行项目似乎总是存在这样的问题-它不一定注意到哪些已更改并开始编译所有内容。
查看"预编译头"选项,这可能有助于加快处理速度。
当从C ++ Builder 2007开始的Borland / CodeGear切换到MSBuild系统时,编译速度变得更快,效率更高。
我们是否使所有或者许多文件都依赖于特定模块?
每当修改模块类结构(包含在.h文件中)时,都将重建依赖于特定模块的所有文件。例如,如果我们有一个可由许多其他模块访问的数据模块,则每次修改数据模块的类结构时,都会看到所有依赖模块的重建。
Borland中有一个编译指示,它控制重新编译多少行代码。
在过去的几年中,我管理(在某些项目中)仅编译源代码的更改。我不知道这是否可以在新版本的borland中使用
Borland 6有一个语用" hdrstop"。
仅当项目选项"预编译头"不是"无"时,此选项才处于活动状态
多年前,我有一台速度很慢的计算机,并通过以下技巧将编译时间从数小时缩短至数分钟
所有cpps都已成为第一行
#include "all.h" #pragma hdrstop
默认是" vcl.h"的包含
" all.h"将包括所有头文件,所有文件头都需要!单位。每个单元都将跳过所有源,这取决于在pragma hdrstop之前的标头。
例子:
Unit1.h
#include <string>
Unit1.cpp
#include "all.h" #pragma hdrstop #include "Unit1.h"
Unit2.h
#include <vcl>
Unit2.cpp
#include "all.h" #pragma hdrstop #include "Unit2.h"
全部
#include <string> #include <vcl>
输入
- 不要在头文件中使用all.h
- 我们可以添加所有包含项,并在项目标头中使用,例如,
- 取决于"预编译头"的所有源将不再被编译!
- 预编译头文件的生成将很慢!因此,仅在all.h中添加标头,该标头不会经常更改。像系统头文件或者头文件已经完成。
- 编译可能会失败。有时include的顺序会为编译产生"死锁"。如果发生这种情况,请停用"预编译头"。如果像在Java中那样编写c ++,大多数问题都将得到解决:每个类都将成为他自己的文件(cpp和h)。
- 项目选项"预编译头"中的文件名显示实际的预编译文件的基本名称。一个单元可以与另一个单元共享一个预编译文件,前提是该文件在" pragma hdrstop"之前具有(完全相同)的内含符号。如果只有一个带有数字后缀的文件,则可以达到最佳性能。多个预编译头的示例:
Unit1.h
#include <string>
Unit1.cpp
#include "all.h" #pragma hdrstop #include "Unit1.h"
Unit2.h
#include <vcl>
Unit2.cpp
#include <vcl> //!!!!!!!!!!!!!!!!!!! produce a second version of an precompiled file #pragma hdrstop #include "Unit2.h"
全部
#include <string> #include <vcl>