Visual Studio 对象文件名的相对输出目录

waxmsbnn  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(180)

如果我将Object File Name$(IntDir)更改为$(IntDir)%(RelativeDir),Visual Studio在编译时会给出以下错误:

C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(1016,5): error MSB3191: Unable to create directory "C:\Source\Repos\Smia\DpGraphs\out\x64\Debug\C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.36.32522\modules". The given path's format is not supported.

C:\Source\Repos\Smia\DpGraphs\out\x64\Debug\是我的$(IntDir)。Visual Studio似乎想编译C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.36.32522\modules中的某个文件,而%(RelativeDir)被计算为完整路径,因为它与我的项目无关。
我在我的项目中使用C++模块,所以这可能就是为什么编译该路径上的文件的原因。
我的项目中有同名的文件,所以我想在Object File Name中保留%(RelativeDir)
我该如何解决这个问题?Visual Studio 2022 17.4.0.

编辑1

这是我的项目档案。正如您所看到的,我并没有包含所有使用相对路径的文件,因此我认为导致问题的文件必须包含在<import Project"..." />行中。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{bda3f5fc-e66c-4c4c-a540-6432a8b2a847}</ProjectGuid>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <PlatformToolset>v143</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ItemDefinitionGroup>
    <ClCompile>
      <LanguageStandard>stdcpplatest</LanguageStandard>
      <ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="DirectedGraph\DirectedGraph.ixx" />
    <ClCompile Include="DirectedGraph\Edge.cpp" />
    <ClCompile Include="DirectedGraph\Edge.ixx" />
    <ClCompile Include="DirectedGraph\Graph.cpp" />
    <ClCompile Include="DirectedGraph\Graph.ixx" />
    <ClCompile Include="DirectedGraph\GraphTypes.ixx" />
    <ClCompile Include="DirectedGraph\Node.cpp" />
    <ClCompile Include="DirectedGraph\Node.ixx" />
    <ClCompile Include="NestableGraph\Edge.cpp" />
    <ClCompile Include="NestableGraph\Edge.ixx" />
    <ClCompile Include="NestableGraph\Graph.cpp" />
    <ClCompile Include="NestableGraph\Graph.ixx" />
    <ClCompile Include="NestableGraph\GraphTypes.ixx" />
    <ClCompile Include="NestableGraph\NestableGraph.ixx" />
    <ClCompile Include="NestableGraph\Node.cpp" />
    <ClCompile Include="NestableGraph\Node.ixx" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>

编辑2

我能够找出哪些文件包含完整路径:

  • C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.36.32522\modules\std.ixx.obj
  • C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.36.32522\modules\std.compat.ixx.obj
    编辑3

我已经尝试在我的项目文件中显式地包含导致问题的两个文件。我的想法是,然后我可以只为这些文件覆盖Object File Name。但是,文件只是包含了两次,问题仍然存在。

6pp0gazn

6pp0gazn1#

RelativeDiris not itself necessarily a relative path。它是Include path属性设置为什么。如果Include是绝对的,那么RelativeDir也是绝对的。

jyztefdp

jyztefdp2#

解决方案是禁用Build ISO C++23 Standard Library Modules

相关问题