当编译器编译源(例如*.cpp
)文件时,它会创建目标文件(例如*.o
),以便稍后它将链接到其他.o
和.so
(Windows的.lib
个文件)文件并构成可执行文件。
现在针对类似的情况,每次创建一些.pch files时都不编译头文件,以便链接器将它链接起来。
现在,如果在Visula Studio项目的范围内定义了一个预编译的头文件,那么为什么Visual Studio会抱怨错误(例如**fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?**
)头文件未包含在.cpp文件中。< / p>
总结一下,这是我的问题:
答案 0 :(得分:9)
为什么在每个.cpp文件中都需要项目的预编译头?
因为你要求它。如果您不想使用它,则需要更改.cpp文件的选项。右键单击它,属性,C / C ++,预编译标题,“创建/使用”=“不使用预编译标题”。默认设置为“使用”。这样做没什么意义。
每个编译单元中的预编译头如何优化编译过程?
不必解析#includes。 #include <windows.h>
时特别有用。在具有数百个.cpp文件的大型项目中,节省的时间大约为秒,这些文件可累计达数分钟。到目前为止,它是加速编译器的最便宜的方式,不会降低生成代码的质量。
然后将剩余的98%添加到相应的.o文件中?
当然不是。
答案 1 :(得分:3)
答案 2 :(得分:1)