C++ 变更项目';s dirs中断预编译文件的创建
我使用MSVC2017(如果有必要,使用MSVC2013工具链)。 所以,我用“静态库”项目和控制台应用程序创建了新的解决方案。在这一步,它起作用了 现在,我更改了lib项目的一些项目路径: 输出目录:$(SolutionDir)BuildDebugC++ 变更项目';s dirs中断预编译文件的创建,c++,visual-studio,C++,Visual Studio,我使用MSVC2017(如果有必要,使用MSVC2013工具链)。 所以,我用“静态库”项目和控制台应用程序创建了新的解决方案。在这一步,它起作用了 现在,我更改了lib项目的一些项目路径: 输出目录:$(SolutionDir)BuildDebug 中间目录:$(OutDir)\Debug 我在pch.h中添加了以下内容: #包括 #包括 #包括 #包括 我在控制台应用程序中添加了对我的库和库的include dir的引用。现在Studio无法编译我的项目,显示了关于 错误C2061:语法
中间目录:$(OutDir)\Debug
我在pch.h中添加了以下内容:
- #包括
- #包括
- #包括
- #包括
int func(LONG v)
的简单文件。它似乎在编译。但是,我将控制台应用程序添加到解决方案中,将其与静态库链接,并且它不是编译的
错误C2065:“长”:未声明的标识符
更新2:我发现静态库文件没有添加到预编译头中。因此,我直接将其包含在标题中,并添加了typedef struct IUnknown IUnknown由于与IUnknown
相关的新错误,在windows.h之前出现code>。它似乎起作用了。但我仍然不明白到底发生了什么。“预编译头”是一种构建速度优化。如果他们给你带来问题,你可以暂时关闭他们的使用。当它们关闭时,.pch
不再使用,但.h
仍在使用
我希望您仍然会有缺少的LONG
,因为它甚至不在.h
为了您的理智,为预编译的.h
使用显式名称可能会很有用。我不确定VS2017默认情况下是否已经使用了pch.h
,或者它仍然使用stdafx.h
。不管怎样,这只是一个默认值。如果需要,还可以将它们重命名为staticlib.h/.pch
和executable.h/.pch
,以避免混淆。编译器没有pch的默认名称;它依赖于编译器开关/Yc
(创建)和/Yu
(使用)。我希望禁用预编译头是最后的措施。此外,我仍然想知道问题出在哪里,以确保我没有做过非常糟糕的事情(并且没有其他事情被破坏)。默认情况下,MSVC2017将预编译头命名为pch.h,但我不认为这是一个问题-我仍然可以在其中包含其他头,如,并且它可以工作。@qloq:禁用pch是解决问题的一个步骤。一旦解决了所有非PCH问题,就可以重新启用它。至于命名问题,问题可能是您有两个名为pch.h
的文件,一个用于静态库,另一个用于可执行文件。我试图禁用pch。按照预期工作(以相同的方式),只是我仍然需要在Windows.h之前添加typedef。顺便说一下,我只使用了一个预编译头(在静态库中)。