如果我将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
。但是,文件只是包含了两次,问题仍然存在。
2条答案
按热度按时间6pp0gazn1#
RelativeDir
is not itself necessarily a relative path。它是Include
path属性设置为什么。如果Include
是绝对的,那么RelativeDir
也是绝对的。jyztefdp2#
解决方案是禁用
Build ISO C++23 Standard Library Modules
: