우선 중요한 부분을 붙여 놓기를 놓쳤습니다. 결과적으로 표시되는 내용은 유효한 msbuild 구문이 아닙니다. 'ProjectConfiguration'은 ItemGroup 내부에 있으므로 Item입니다. 그래서 완전한 정의는 예를 들어, 실제로 :
<ItemGroup>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
이 2 개 요소라는 ProjectConfiguration '당신이 전화를 원하는'목록/배열/수집/정의합니다. 첫 번째 요소는 "Debug | Win32"이고 2 개의 Metadata 항목이 있습니다. 첫 번째 요소는 값이 'Debug'인 'Configuration'이고 두 번째 요소는 'Win32'값을 갖는 'Platform'입니다. ProjectConfiguration 항목은 기본적으로 VS의 GUI를 포함하여 빌드 시스템에 알려주는 목록으로, 프로젝트에 어떤 구성/플랫폼 조합이 존재 하는지를 나타냅니다.
Properties은 PropertyGroup에 정의되어 있으며 키/값 쌍입니다. PropertyGroup의 Condition 속성은 조건이 일치하는 경우에만 정의되는 속성으로 연결됩니다. 따라서 Include와 Condition 모두 xml 속성이지만 완전히 다른 용도로 사용됩니다. 첫 번째 항목은 Item 컬렉션에 요소를 추가하고 두 번째 항목은 조건부입니다 (거의 모든 다른 msbuild에 배치 할 수 있음). 요소, Item 또는 ItemGroup에도 있음) False로 평가되면 내용이 삭제됩니다.
다음을 실행할 때 : MSBuild.exe MyProject.vcxproj /p:Configuration=Debug /p:Platform=Win32
적용되는 것은 무엇입니까? 그들은 하나로 합쳐 졌습니까?
이 /p
를 전달하는 명령 줄에 속성을 정의 (일반적으로 프로젝트 파일에 지정된보다 우선 명령 줄에 정의 또한 등록 정보)를 PropertyGroup에 정의 된 속성에서 전혀 다른. 이제 ItemGroup의 경우 명령 행에서 전달한 것과 아무런 차이가 없습니다. 빌드 시스템에 어떤 조합을 사용할 수 있는지 알려주는 2 가지 요소가 여전히 포함되어 있습니다. 어떤 속성이 적용 되느냐는 변경됩니다. 고려 :
$()
구문이 통과 그래서 만약 속성 값을 확장하는 데 사용됩니다
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<UseDebugLibraries>false</UseDebugLibraries>
</PropertyGroup>
/P : 구성 = 디버그, 플랫폼 = Win32에서 명령 줄 다음에 '$ (구성) | $ (플랫폼)'== ' Debug | Win32 ' "구문 분석 및 평가 후'Debug | Win32 '=='Debug | Win32 '"가 True로 평가됩니다. 따라서 첫 번째 PropertyGroup 정의가 적용되지만 후자의 경우 조건이 일치하지 않으므로 두 번째 PropertyGroup 정의는 적용되지 않습니다. 결과적으로 'UseDebugLibraries'라는 속성은 'true'값을 가져옵니다. 당신은/p : Configuration = Release, Platform = Win32 대신에 'false'값을 얻을 것입니다. 이것은 궁극적으로 실행 된 컴파일러/링커 명령을 변경하고 사용할 런타임 라이브러리를 알려주는 플래그를 전달하는 데 사용됩니다.
PropertyGroup의 요소를 추가하면 UseDebugLibraries와 같은 매개 변수의 다른 값을 사용합니다. 자세한 내용은 https : //msdn.microsoft.com/en-us/library/dd293607을 참조하십시오.aspx –