다중 프로세서를 사용하여 프로젝트 빌드
MSBuild에서는 다중 프로세서 또는 다중 핵심 프로세서가 있는 시스템을 사용할 수 있습니다. 사용 가능한 각 프로세서에 대해 별도 빌드 프로세스가 만들어집니다. 예를 들어 시스템에 4개의 프로세서가 있는 경우 네 개의 빌드 프로세스가 만들어집니다. MSBuild는 이러한 빌드를 동시에 처리할 수 있기 때문에 전체 빌드 시간이 감소합니다. 그러나 병렬 빌드에서는 빌드 프로세스가 발생하는 방법과 관련하여 몇 가지 사항이 변경되었습니다. 이 항목에서는 이러한 변경 내용에 대해 설명합니다.
프로젝트 간 참조
Microsoft Build Engine은 병렬 빌드를 사용하여 프로젝트를 빌드하는 동안 P2P(프로젝트 간) 참조가 발생하면 해당 참조를 한 번만 빌드합니다. 두 프로젝트에 동일한 P2P 참조가 있는 경우 각 프로젝트에 대해 참조가 다시 빌드되지 않습니다. 대신 빌드 엔진은 의존하는 두 프로젝트 모두에 대해 동일한 P2P 참조를 반환합니다. 동일한 대상에 대한 세션의 후속 요청에 동일한 P2P 참조가 제공됩니다.
주기 검색
주기 검색은 현재 MSBuild가 다른 시간이나 빌드에서 주기 검색을 보고할 수 있다는 점을 제외하고 MSBuild 2.0의 경우와 동일하게 작동합니다.
병렬 빌드 중 오류 및 예외
병렬 빌드에서는 비병렬 빌드에서 수행하는 것과는 다른 시간에 오류 및 예외가 발생할 수 있고, 하나의 프로젝트가 빌드되지 않을 때 다른 프로젝트가 계속 빌드될 수 있습니다. MSBuild는 한 프로젝트 빌드가 실패한 경우에도 병렬로 수행 중인 다른 프로젝트 빌드가 중지되지 않습니다. 따라서 다른 프로젝트는 성공 또는 실패할 때까지 계속 빌드됩니다. 그러나 ContinueOnError가 활성화된 경우 오류가 발생하더라도 빌드가 중지되지 않습니다.
C++ 프로젝트(.vcxproj) 및 솔루션(.sln) 파일
C++ 프로젝트(.vcxproj) 및 솔루션(.sln) 파일은 둘 다 MSBuild 작업에 전달될 수 있습니다. C++ 프로젝트의 경우 VCWrapperProject가 호출된 다음 내부 MSBuild 프로젝트가 만들어집니다. C++ 솔루션의 경우 SolutionWrapperProject가 호출된 다음 내부 MSBuild 프로젝트가 만들어집니다. 두 경우 모두 결과 프로젝트는 다른 MSBuild 프로젝트와 동일하게 처리됩니다.
다중 프로세스 실행
거의 모든 빌드 관련 작업을 수행할 때 경로 관련 오류를 방지하기 위해 빌드 프로세스 전체에서 현재 디렉터리가 일정하게 유지되어야 합니다. 따라서 여러 디렉터리가 만들어지는 결과를 가져오므로 프로젝트를 MSBuild의 여러 다른 스레드에서 실행할 수 없습니다.
이 문제를 방지하면서도 다중 프로세서 빌드를 사용하도록 설정하기 위해 MSBuild는 “프로세스 격리”를 사용합니다. MSBuild는 프로세스 격리를 사용하여 최대 n
개의 프로세스를 생성할 수 있습니다. 여기서 n
은 시스템에서 사용 가능한 프로세서 수와 같습니다. 예를 들어 MSBuild가 2개의 프로세서가 있는 시스템에서 솔루션을 빌드할 경우 빌드 프로세스가 2개만 만들어집니다. 이러한 프로세스는 솔루션의 모든 프로젝트를 빌드하기 위해 다시 사용됩니다.