在MSDN上阅读这个非常小的解释后,我的问题出现了:
https://msdn.microsoft.com/en-us/library/3ay26wa2.aspx
对于记录,似乎“预编译对象”只是用于创建.pch(预编译头文件)文件的.obj文件。
根据MSDN,您需要将预编译对象与使用它的相应.pch文件的所有其他.obj文件链接在一起。为什么?如果使用/ Yu选项使用CL.EXE编译其他.obj文件,那么它们确实包含.pch对吗?毕竟,在大多数情况下,预编译对象只是一堆预处理器指令......
答案 0 :(得分:0)
pch远不是一堆预处理程序指令。它更接近于翻译单元中包含(直接或间接)所有类型的前端编译缓存。典型地包含标准标头(例如<windows.h>
或<vector>
)最终会导致数百个文件,有时甚至数十万行代码,因此缓存它们的处理非常重要。
例如,如果你将一个#pragma pack
的类型编译成一个pch,并将另一个pack
(或align
)编译成其他翻译单元 - 你会有一个阴险的你手上的错误,因为这些翻译单位不会就对象布局达成一致。
pch的重点是避免生成其他目标文件并包含此信息。在生成一次后,必须与缺少它的所有obj文件链接。