代码之家  ›  专栏  ›  技术社区  ›  Fedor

Visual Studio 2022 17.6版本中的预编译标头错误

  •  0
  • Fedor  · 技术社区  · 2 年前

    我有一个Visual Studio C++项目,最近将Visual Studio 2022从版本17.5更新到版本17.6后,编译一开始就停止了,并出现错误:

    1>------ Rebuild All started: Project: MRPch, Configuration: Debug x64 ------
    1>Scanning sources for module dependencies...
    1>std.compat.ixx
    1>std.ixx
    1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\modules\std.compat.ixx : fatal  error C1083: Cannot open include file: 'MRPch.h': No such file or directory
    1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\modules\std.ixx : fatal  error C1083: Cannot open include file: 'MRPch.h': No such file or directory
    1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(486,5): warning MSB8074: Cannot read Module Dependencies file C:\Work\MeshInspector\source\TempOutput\MRPch\x64\Debug\std.ixx.module.json: Expecting element 'root' from namespace ''.. Encountered 'None'  with name '', namespace ''.  The build order might be incorrect.
    1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(486,5): warning MSB8074: Cannot read Module Dependencies file C:\Work\MeshInspector\source\TempOutput\MRPch\x64\Debug\std.compat.ixx.module.json: Expecting element 'root' from namespace ''.. Encountered 'None'  with name '', namespace ''.  The build order might be incorrect.
    

    据我所知,它与预编译头有某种关系 MRPch.h ,通过编译器选项强制包含在所有源文件中 /FI"MRPch.h" .

    如果我删除强制包含,则错误将更改为

    C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\modules\std.ixx(147,1): fatal  error C1010: unexpected end of file while looking for precompiled header.
    

    两者都没有 std.compat.ixx 也没有 std.ixx 在我的项目中,但我发现错误与 /std:c++latest 命令行选项,启用最新的语言功能。

    我看着 Visual Studio 2022 version 17.6 Release Notes ,但在那里没有看到任何与预编译头文件相关的内容。它们不再与最新的C++标准兼容了吗?

    0 回复  |  直到 2 年前
        1
  •  15
  •   head scratcher    2 年前

    若要解决此问题,请更改此设置:项目属性>C/C++>语言>构建ISO C++23标准库模块>不。

        2
  •  1
  •   Donpedro    2 年前

    我知道在最初的问题中没有提到CMake,但这是我搜索这个问题时的第一个结果之一,所以我会把CMake项目的解决方案留在这里,也许它对其他人有用。

    创建一个包含以下内容的属性表(*.props文件):

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
        <ItemDefinitionGroup>
            <ClCompile>
            <BuildStlModules>false</BuildStlModules>
            </ClCompile>
        </ItemDefinitionGroup>
    </Project>
    

    使用PCH将属性表添加到目标中,例如:

    SET_PROPERTY(TARGET target_name PROPERTY VS_USER_PROPS path_to_props_file.props)