【问题标题】:Changing project's dirs breaks precompiled file creation更改项目的目录会破坏预编译文件的创建
【发布时间】:2021-05-19 16:41:07
【问题描述】:

我使用 MSVC2017(如果需要,使用 MSVC2013 工具链)。 因此,我使用“静态库”项目和控制台应用程序创建了新的解决方案。在这一步它可以工作了。

现在,我为 lib 项目更改了一些项目的路径:

输出目录:$(SolutionDir)BuildDebug
中间目录:$(OutDir)\Debug
我在 pch.h 中添加了以下内容:

  • #include
  • #include
  • #include
  • #include

我在控制台应用程序中添加了对我的 lib 和 lib 的包含目录的引用。现在Studio无法编译我的项目,显示很多关于

的错误

错误 C2061:语法错误:标识符“LONG”

和相关的。 我发现任何地方都没有 .pch 文件。 我还单独使用相同的静态库创建了测试解决方案并更改了相同的路径。似乎编译成功,但 Intellisense 用红色下划线“LONG”,表示“未定义”。 可能有人面临同样的问题。

更新:我只是尝试创建一个新的解决方案。我添加了静态库项目,然后添加了具有单个函数int func(LONG v) 的简单文件。它似乎可以编译。但是后来我将控制台应用程序添加到解决方案中,将它与静态库链接,它没有编译,说

错误 C2065:“LONG”:未声明的标识符

更新 2:我发现静态库文件没有看到 添加到预编译头文件中。所以我直接将它包含在我的标题中并在 windows.h 之前添加了typedef struct IUnknown IUnknown;,因为与IUnknown 相关的新错误。它似乎工作。但我还是不明白这是怎么回事。

【问题讨论】:

    标签: c++ visual-studio


    【解决方案1】:

    “预编译头文件”是一种构建速度优化。如果它们给您带来问题,您可以随时暂时关闭它们的使用。当它们关闭时,.pch 不再使用,但.h 仍然使用。

    我希望您仍然会丢失LONG,因为它甚至不在.h

    为了您的理智,为预编译的.h 使用显式名称可能会很有用。我不确定VS2017是否已经默认使用pch.h,或者它仍然使用stdafx.h。无论哪种方式,这只是一个默认值。如果需要,您还可以将它们重命名为 staticlib.h/.pchexecutable.h/.pch 以避免混淆。编译器没有 pch 的默认名称;它依赖于编译器开关/Yc(创建)和/Yu(使用)。

    【讨论】:

    • 我希望禁用预编译头是最后的措施。另外,我仍然想知道问题出在哪里,以确保我没有做非常糟糕的事情(并且没有其他任何问题)。默认情况下,MSVC2017 将预编译的头文件命名为 pch.h,但我认为这不是问题 - 我仍然可以在其中包含其他头文件,如 ,并且它可以工作。
    • @qloq:禁用 PCH 是解决问题的一个步骤。解决所有非 PCH 问题后,您可以重新打开它。至于命名问题,问题可能是您有 两个 文件都命名为 pch.h,一个用于您的静态库,一个用于您的可执行文件。
    • 我试图禁用 pch。按预期工作(以相同的方式),除了我仍然需要在 Windows.h 之前添加该 typedef。顺便说一句,我使用唯一的单个预编译头文件(在静态库中)。
    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多