我克隆了一个包含3个项目的repo c ++解决方案,一个控制台应用程序.exe
,一个dll项目.dll
和一个单元测试.dll
。我不确定使用哪个版本的VS或编译器。
在我的机器上构建解决方案会出错
寻找预编译的标头时出现意外的文件结尾。你伪造了吗 t将'#include“ pch.h”'添加到您的来源中?
我在每个项目中根据另一种解决方案分别创建了pch.h
和pch.cpp
。
将每个项目的properties->c/c++->precompiled headers
更改为
precompiled header = Create (/Yc)
precompiled header file = pch.h
precompiled header output file = $(IntDir)$(TargetName).pch
清除解决方案并删除Debug
文件夹中的所有内容
现在构建解决方案引发
严重错误C1010:查找预编译的标头时,文件意外结束。你伪造了吗 要将'#include“ stdafx.h”'添加到您的来源中?
msbuild.exe
。对我来说,怪异的部分是VC ++右键单击解决方案并进行构建,没有显示任何错误并进行了构建项目,此后msbuild.exe也会重新生成而没有错误。但是从Debug文件夹中删除所有内容并重试msbuild.exe再次显示这些错误! 我应如何强制解决方案中的所有项目使用stdafx.h
或pch.h
答案 0 :(得分:0)
预编译头文件是加快构建过程的一项功能,因此,如果您在构建时遇到麻烦,可以始终关闭预编译头文件(在整个项目的项目设置中选择“不使用预编译头文件”),然后构建应该可以工作。
如果要使用预编译的头文件构建项目,则应仅对一个仅包含预编译头文件的include语句的源文件(pch.cpp或stdafx.cpp)启用“创建”选项。所有其他源文件都应选择“使用”预编译头。此外,它们还必须具有正确的#include语句作为预编译头文件的正确位置,作为文件中的第一条非注释行。
这个想法是,编译器在处理带有'create'选项集的文件中的预编译头文件#include语句时,会对其内部状态进行转储。 然后,当打开“使用”选项时,在文件中看到相应的包含文件时,它将加载该转储。加载转储的速度可能比例如通过Windows.h解析。因此,应将任何常用的大型头文件#include语句放入pch.h或stdafx.h。
如果.cpp文件具有“使用”选项,但是未找到带有在“预编译头文件”选项中设置的文件名的#include语句,则会产生错误消息。
答案 1 :(得分:0)
项目配置属性-> C / C ++->高级-> 强制包含文件中有一个选项。对于所有平台下的所有配置,请在此处输入新名称pch.h。这将迫使编译器在每个编译单元中自动#include "pch.h"
。
在这里停一会儿。对于所有配置和所有平台,或者您正在构建的一个 。在这里进行三重检查,不能多说。另外,请检查您是否正在编辑整个项目的设置,而不是单个文件。
这很有用,因为#include "pch.h"
必须按字面意思是每个编译单元中的第一个include。如果foo.cpp
做#include "foo.h"
不会有利于第一行中的#include "pch.h"
。没用文件foo.cpp
必须自己完成#include "pch.h"
,#include "foo.h"
才能完成。
或者,如果您已经将stdafx.h重命名为其他地方的其他内容,并且不知道错误<{1>}来自 Force Include File 的位置,那么检查该地方!