우리 회사에서는 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에서 서로 종속되어있는 프로젝트의 병렬 컴파일
답변
C++ 컴파일러 스위치/MP는 cpp 파일을 병렬로 컴파일하기위한 것입니다. 이는 프로젝트별로 제공됩니다. 그러나 모든 프로젝트를 병렬로 구축 할 수는 없습니다. 그렇게하려면 msbuild.exe에 -M [: num] 또는 -maxcpucount (max cpu count)를 전달해야합니다. (자세한 내용은 https://msdn.microsoft.com/en-us/library/ms164311.aspx 참조)
첫 번째 질문에 대한 답변 : "서로 종속 관계가있는 프로젝트를 병렬로 컴파일 할 수있는 방법이 있다면". 대답은 다소 있습니다. 서로 의존하는 두 프로젝트가 솔루션에 있고 서로 간의 종속성이 명확하게 표시된 경우 cpp 파일은 동시에 컴파일 할 수 있지만 동시에 링크 할 수는 없습니다. 연결은 서로에 의존하는 순서대로 이루어져야합니다.
그래서 일반적으로 프로젝트간에 가능한 한 적은 의존성을 원하는 경우 컴파일 속도를 높이십시오. 그러나 C++을 더 빨리 컴파일 할 수있는 다른 방법이 있습니다.
VS 2017의 경우 업그레이드를 위해 실행하지 마십시오.
답장을 보내 주셔서 감사합니다. "서로 간의 의존성이 분명하게 표시되어 있습니다"라고 말하면 무슨 뜻인지 설명해 주시겠습니까? 프로젝트 A의 파일 a.cpp가 프로젝트 B의 파일 b.cpp에 구현 된 클래스를 사용하더라도 a.cpp와 b.cpp를 병렬로 컴파일 할 수없는 이유를 알 수 없습니다 (헤더 b.hpp에 대한 액세스는 a.cpp가 컴파일하기에 충분할 것). 프로젝트 간 종속성을 제거하는 것이 이상적 일 것입니다. 불행히도 저는 진지하게 진전을 보지 못했습니다. – opetroch
솔루션 파일은 빌드 할 대상과 서로 다른 대상을 나열합니다. 이것이 모두 해결책입니다 (* .sln). 그것은 복잡하지 않습니다. –
SCU (단일 컴파일 유닛) 빌드를 채택한 것으로 생각하십니까? – VTT
나는 그것을 빨리 시험해 보았다. 처음에는 많은 컴파일 오류가 발생했습니다. 두 개의 소스 파일에서 정의 된 동일한 이름을 가진 자유 함수 (잘못된 것으로 들리고 악이 맞음)에 오류가 발생합니다. 그것은 지저분한 코드가있는 오래된 코드베이스이므로 컴파일하기위한 노력이 필요합니다. 전체 빌드를 빠르게 만들지 만 부분 빌드 (예 : 단일 소스로 변경) 파일의 속도가 느려지고, 속도가 느려지므로 작동하도록 주장하지 않았습니다. – opetroch