【问题标题】:cl.exe Difference in object files when /E output is the same and flags are the samecl.exe /E 输出相同且标志相同时目标文件的差异
【发布时间】:2010-05-10 20:00:17
【问题描述】:

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

我有两个编译脚本,两者仅在 /I 标志上有所不同(包含目录不同)。所有其他标志都是相同的。这些脚本产生不同的目标文件(不仅仅是下面提到的时间戳差异)。奇怪的是,两个脚本的 /E 输出是一样的。这意味着包含文件不会导致目标文件的差异,但话说回来,差异来自哪里?

谁能解释我在我的情况下如何看到两个不同的目标文件。如果包含文件导致差异,我怎么会看到相同的 /E 输出?

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

编辑:PSS:我什至查看了 cl.exe 的 /includeFiles 输出,该输出是相同的。然而,目标文件的不同不仅仅在于时间戳(事实上,一个比另一个大 1KB!)

【问题讨论】:

    标签: include preprocessor flags cl.exe


    【解决方案1】:

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

    如果是这样,不应该 /E 输出不一样? /E 标志给出 预处理器的输出。

    好点!那么如果你使用/P(和/E一样但是要归档),生成的文件是完全一样的吗?

    【讨论】:

    • 如果是这样的话,/E输出不应该不同吗? /E 标志给出预处理器的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多