Почему имя файла проекта (только) иногда добавляется к промежуточному каталогу MSBuild?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему имя файла проекта (только) иногда добавляется к промежуточному каталогу MSBuild?

Сообщение Anonymous »

В моих сборках мне необходимо обеспечить определенный промежуточный каталог. Теперь я заметил, что для создания файла .vcxproj используется другой промежуточный каталог, чем для создания того же проекта как части файла .sln: фактически, в первом случае имя файла проекта добавляется в качестве дополнительный уровень, а последний - нет.
При отладке я обнаружил, что промежуточные каталоги различаются между файлами .vcxproj в папке .sln ( к которым добавлено имя проекта) и файлы .vcxproj в других местах (которые этого не делают).
Почему это так, где это задокументировано и как я могу это настроить для оставаться постоянным?
В документации, которую я нашел, говорится, что

$(IntDir): путь к каталогу, указанному для промежуточных файлов. Если это относительный путь, промежуточные файлы переходят по этому пути, добавленному к каталогу проекта.

Я предполагаю, что «проект каталог" — это $(ProjectDir), который не различается между сборками, поэтому у меня нет объяснения, почему $(IntDir) различается.
Вот MWE чтобы воспроизвести проблему:
Project.vcxproj



{00000000-0000-0000-0000-000000000001}



Debug
x64



v143






Sub\Project.vcxproj



{00000000-0000-0000-0000-000000000002}



Debug
x64



v143






Solution.sln
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RootProject", "Project.vcxproj", "{00000000-0000-0000-0000-000000000001}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SubProject", "Sub\Project.vcxproj", "{00000000-0000-0000-0000-000000000002}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{00000000-0000-0000-0000-000000000001}.Debug|x64.ActiveCfg = Debug|x64
{00000000-0000-0000-0000-000000000001}.Debug|x64.Build.0 = Debug|x64
{00000000-0000-0000-0000-000000000002}.Debug|x64.ActiveCfg = Debug|x64
{00000000-0000-0000-0000-000000000002}.Debug|x64.Build.0 = Debug|x64
EndGlobalSection
EndGlobal

Build.bat
@echo off

pushd "%~dp0"
if "%VSCMD_VER%" == "" (
call "%VS2022INSTALLDIR%\Common7\Tools\VsDevCmd.bat" -arch=amd64
)

set CMD=MSBuild.exe -v:diag -property:Configuration=Debug -property:Platform=x64
set GREP=findstr /b /c:"IntDir ="

%CMD% Solution.sln -target:RootProject | %GREP%
%CMD% Solution.sln -target:SubProject | %GREP%
%CMD% Project.vcxproj | %GREP%
%CMD% Sub\Project.vcxproj | %GREP%

Вывод
IntDir = Project\x64\Debug\
IntDir = x64\Debug\
IntDir = Project\x64\Debug\
IntDir = Project\x64\Debug\

dir *.lastbuildstate /s/b (ожидаем два файла, находим три)
.\Project\x64\Debug\Project.tlog\Project.lastbuildstate
.\Sub\Project\x64\Debug\Project.tlog\Project.lastbuildstate
.\Sub\x64\Debug\Project.tlog\Project.lastbuildstate


Подробнее здесь: https://stackoverflow.com/questions/791 ... -intermedi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»