为什么 C++ Builder 6 总是编译所有文件?

我对一个文件进行了一些更改,但当我启动应用程序时,BCB 6 会编译所有文件。任何想法?我使用的是Windows XP SP2。

有帮助吗?

解决方案

试试这个 BCB 编译器插件:Bcc32Pch IDE 插件

其他提示

源文件和二进制对象是否位于同一台计算机上?如果没有,听起来您有网络时间同步问题。

如果它们很可能是头文件问题,则编译器包含文件在未来某个时间有修改日期,或者您的应用程序依赖于某些在编译期间(例如从 COM 导入)更改的头文件。

编辑:检查设置 VS 是否有一个始终重新编译的标志,对于 BCB 也可能如此,如果设置了则取消设置。另一种可能性是预编译头被错误配置为在每个源文件上生成。

我对BCB 6不熟悉,无法给出更准确的答案。

您是否使所有或许多文件依赖于特定模块?

每当修改模块类结构(包含在 .h 文件中)时,任何依赖于特定模块的文件都将被重建。例如,如果您有一个被许多其他模块访问的数据模块,那么每次修改数据模块的类结构时,您都会看到所有依赖模块的重建。

Borland中有一个pragma,它控制重新编译多少行代码。

在过去的几年里,我(在某些项目中)管理过,只编译我的源代码的更改。我不知道这是否适用于较新版本的 borland

Borland 6 有一个编译指示“hdrstop”。仅当项目选项“预编译头”不是“无”时,此选项才处于活动状态

几年前,我有一台非常慢的计算机,我通过以下技巧将编译时间从几小时缩短到几分钟

所有的cpp都成为了第一线

#include "all.h"
#pragma hdrstop

默认包含“vcl.h”

“all.h”将包含所有需要的头文件!单位。每个单元都会跳过所有源,这取决于标头 pragma hdrstop。

例子:

单元1.h

 #include <string>

单元1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

单元2.h

 #include <vcl>

单元2.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit2.h"

全部.h

   #include <string>
   #include <vcl>

输入

  1. 不要在头文件中使用 all.h
  2. 您可以添加项目标头中使用的所有包含内容,例如,
  3. 所有依赖于“预编译头”的源都不会被再次编译!
  4. 预编译头的生成会很慢!所以只在all.h中添加头文件,不会经常更改。就像系统标题或已经完成的标题一样。
  5. 编译可能会失败。有时,包含的顺序会导致编译出现“僵局”。如果发生这种情况,请停用“预编译头”。如果你像 Java 一样编写 C++,大多数问题都会得到解决:每个类都会成为他自己的文件(cpp和h)。
  6. 项目选项“预编译头”中的文件名显示了实际预编译文件的基本名称。如果一个单元在“pragma hdrstop”之前有(完全相同)相同的包含内容,则它可以与另一个单元共享预编译文件。如果您只有一个带有数字后缀的文件,则可以达到最佳性能。多个预编译头的示例:

单元1.h

 #include <string>

单元1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

单元2.h

 #include <vcl>

单元2.cpp

   #include <vcl> //!!!!!!!!!!!!!!!!!!! produce a second version of an precompiled file
   #pragma hdrstop

   #include "Unit2.h"

全部.h

  #include <string>
  #include <vcl>

确保您使用的是“make”命令而不是“build”命令,除非需要。

使用 Borland 工具制作项目似乎总是存在这个问题——它不一定注意到哪些工具已更改并开始编译所有内容。

查看预编译头选项,这可能有助于加快速度。

当 Borland/CodeGear 从 C++Builder 2007 开始切换到 MSBuild 系统时,编译速度更快、效率更高。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top