cl.exe当/ E输出相同且标志相同时,目标文件的差异

时间:2009-06-15 21:10:25

标签: include preprocessor flags cl.exe

我正在使用Visual Studio 2005的cl.exe编译器。我用一堆/ I / D和一些编译/优化标志(例如:/ Ehsc)来调用它。

我有两个编译脚本,两者的区别仅在于/ I标志(包含目录不同)。所有其他标志都是相同的。这些脚本生成不同的目标文件(而不仅仅是时间戳差异,如下所示)。奇怪的是两个脚本的/ E输出是相同的。这意味着包含文件不会导致目标文件的差异,但是再次,差异来自哪里?

任何人都可以阐明我在我的情况下如何看到两个不同的目标文件。如果包含文件导致差异,我怎么看到相同的/ E输出?

PS。目标文件不仅在时间戳中不同,而且在代码部分也不同。事实上,我的最终可执行文件的行为在两种情况下都是不同的。

编辑:PSS:我甚至查看了cl.exe的/ includeFiles输出,输出结果相同。但是,目标文件的不同之处不仅仅是时间戳(实际上,一个比另一个大1KB!)

1 个答案:

答案 0 :(得分:0)

我的猜测是你包含的头文件#define你的代码依赖的一些预处理器常量。您已经提到过可执行文件的行为不同。如果您有不同的代码,那么目标文件的大小可能会有所不同。

  

如果是这样的话,不应该是/ E.   输出有所不同? / E标志给出了   预处理器的输出。

好点!因此,如果您使用/ P(与/ E相同但文件相同),生成的文件完全相同?