我使用 ClearCase 已经 20 年了,这是一个疯狂的问题。8 年前我在另一个编译器中遇到过它,但这次我没有解决方法。
FileA 包括 HeaderX 和 HeaderY 但预编译器从不读取与 HeaderX 无关的 HeaderY (将 HeaderX 排除在等式之外或对 HeaderX 进行相对任意的更改并读取 HeaderY)
随机地,我们看到旧的 powerpc-wrs-vxworks gcc-2.96 编译器在预编译期间不包含文件。这仅发生在特定的vob中,并且仅发生在动态视图中并且随机发生。我们认为这是特定于这个特定的 VOB,并且认为 VOB 有问题。我们遇到过 Win7 ClearCase 版本 7.1.2.1 的问题,但也遇到过 WinXP 的问题。多年来,我们注意到这个 VOB 与另一个编译器有类似的问题。当我们跟踪编译器时,我们看到它打开并且 fstat 是包含文件,然后在没有读取的情况下关闭。通常,编译器会在打开后执行读取。跟踪显示 fstat 返回有效大小。下面是对问题的最简单提炼,但不要被引诱认为它与文件内容有关以解释行为 - 您可以对文件进行任意更改以引发正确的行为。具体来说,您可以使用移动到同一视图中或视图外的不同位置的相同文件,编译器将正常运行或使用具有相同文件的不同视图并且它会工作。我们相信,与 MVFS 的一些交互,特定于这个 VOB,以及编译器是问题所在。
有没有人看到出现故障的 VOB 可能进入的状态可能会在视图中随机显示这种不当行为?
富.c:
#include "HeaderX.h" /* fix 1 remove this line
fix 2 rename this include file
fix 3 move this include file to a new dir */
#include "HeaderY.h" /* fix 4 move this line up
fix 5 rename this include file
fix 6 move this include file to a new dir */
HeaderX.h:
/* a=b; fix 7 uncomment this line */
#ifndef X /* fix 8 change this to an #ifdef instead of #ifndif */
#define X /* fix 9 remove this line
fix 10 change just this X to Y
fix 11 move define after endif */
#endif
标头Y.h:
#error hurrah! I was included /* GOAL -- to have this file included
If it is included the precompiler
will print this message.
*/
PS不要告诉我这是一个编译器错误。
相信这是 ClearCase 问题的理由:
- 只发生在动态视图中
- 发生在多台机器、多用户、多视图、不同操作系统上。但这有点随机。
怀疑我的理由的理由:
- 修复 7、8、9、10、11
- 在失败的情况下,使用不同版本的编译器不会导致错误。
- 但我认为质疑编译器是一个红鲱鱼,具有相同文件集的相同编译器将在 ClearCase 之外或在同一视图的不同目录中正常工作。VOB 大约有 15 年的历史,我认为它是 VOB 特有的。但要更换它是一项巨大的努力。