2017-12-11 19 views
0

우리 회사에서는 Visual Studio 2013을 사용하고 있으며 C++ 솔루션 빌드 시간을 단축하고 싶습니다. 이것은 약 55 개의 프로젝트이며 디버그 빌드에 약 20 분이 소요되며 릴리즈 빌드에 더 많은 시간이 소요됩니다. 서로 종속성을 가진 프로젝트를 만드는 방법이 있는지 궁금합니다. 을 병렬로 컴파일하십시오. 이미 다중 프로세스 컴파일 (/ MP 플래그)을 알고 있고 사용하고 있습니다. 실제로 솔루션의 각 프로젝트는 다중 코어를 사용하여 구축됩니다. 마찬가지로 두 프로젝트가 A와 B가 서로에 의존하지 않는다고 가정 해 봅시다. 그러나 현재 설정에서 A가 B에 의존하면 A가 시작되기 전에 B의 빌드가 완료되어야합니다. 필자가 이해하는 한, A 파일의 컴파일은 B가 완료되기 전에 시작될 수 있으며 A의 연결 만 B가 완료 될 때까지 기다려야합니다 (A가 .dll 또는 .exe를 생성한다고 가정). 이것을 달성 할 수있는 방법이 있습니까? VS2013에서 가능하지 않다면 곧 VS2017로 업그레이드 할 계획이므로 VS2017에 대한 제안도 유용합니다.Visual Studio에서 서로 종속되어있는 프로젝트의 병렬 컴파일

+0

SCU (단일 컴파일 유닛) 빌드를 채택한 것으로 생각하십니까? – VTT

+0

나는 그것을 빨리 시험해 보았다. 처음에는 많은 컴파일 오류가 발생했습니다. 두 개의 소스 파일에서 정의 된 동일한 이름을 가진 자유 함수 (잘못된 것으로 들리고 악이 맞음)에 오류가 발생합니다. 그것은 지저분한 코드가있는 오래된 코드베이스이므로 컴파일하기위한 노력이 필요합니다. 전체 빌드를 빠르게 만들지 만 부분 빌드 (예 : 단일 소스로 변경) 파일의 속도가 느려지고, 속도가 느려지므로 작동하도록 주장하지 않았습니다. – opetroch

답변

0

C++ 컴파일러 스위치/MP는 cpp 파일을 병렬로 컴파일하기위한 것입니다. 이는 프로젝트별로 제공됩니다. 그러나 모든 프로젝트를 병렬로 구축 할 수는 없습니다. 그렇게하려면 msbuild.exe에 -M [: num] 또는 -maxcpucount (max cpu count)를 전달해야합니다. (자세한 내용은 https://msdn.microsoft.com/en-us/library/ms164311.aspx 참조)

첫 번째 질문에 대한 답변 : "서로 종속 관계가있는 프로젝트를 병렬로 컴파일 할 수있는 방법이 있다면". 대답은 다소 있습니다. 서로 의존하는 두 프로젝트가 솔루션에 있고 서로 간의 종속성이 명확하게 표시된 경우 cpp 파일은 동시에 컴파일 할 수 있지만 동시에 링크 할 수는 없습니다. 연결은 서로에 의존하는 순서대로 이루어져야합니다.

그래서 일반적으로 프로젝트간에 가능한 한 적은 의존성을 원하는 경우 컴파일 속도를 높이십시오. 그러나 C++을 더 빨리 컴파일 할 수있는 다른 방법이 있습니다.

VS 2017의 경우 업그레이드를 위해 실행하지 마십시오.

+0

답장을 보내 주셔서 감사합니다. "서로 간의 의존성이 분명하게 표시되어 있습니다"라고 말하면 무슨 뜻인지 설명해 주시겠습니까? 프로젝트 A의 파일 a.cpp가 프로젝트 B의 파일 b.cpp에 구현 된 클래스를 사용하더라도 a.cpp와 b.cpp를 병렬로 컴파일 할 수없는 이유를 알 수 없습니다 (헤더 b.hpp에 대한 액세스는 a.cpp가 컴파일하기에 충분할 것). 프로젝트 간 종속성을 제거하는 것이 이상적 일 것입니다. 불행히도 저는 진지하게 진전을 보지 못했습니다. – opetroch

+0

솔루션 파일은 빌드 할 대상과 서로 다른 대상을 나열합니다. 이것이 모두 해결책입니다 (* .sln). 그것은 복잡하지 않습니다. –