2016-06-25 1 views
0

Visual Studio 2015에 상당히 큰 다중 프로젝트 C++ 솔루션이 있습니다. 일부 프로젝트는 다른 프로젝트에서 사용되는 정적 라이브러리로 컴파일됩니다. 컴파일 속도를 높이기 위해 미리 컴파일 된 헤더를 사용합니다. 각 프로젝트에는 여러 빌드 구성이 있습니다. 디버그, 릴리스 및 테스트를 실행하기위한 실행 파일을 항상 빌드하는 몇 가지 테스트 구성 (일반 구성이 정적 라이브러리를 빌드하더라도).MSVC C2859 다른 프로젝트의 다른 빌드 구성을 라이브러리로 사용하는 경우

디버그 및 릴리스 구성을 빌드 할 때 또는 전체 다시 빌드를 수행 할 때 모든 것이 잘 작동하지만 다른 프로젝트의 정적 라이브러리를 사용하는 프로젝트의 테스트 구성을 증분 빌드 할 때 빌드를 유발하는 C2859 오류가 발생합니다 실패.

예를 들어, peach은 정적 라이브러리를 만들고, cobblerpeach에 의존합니다. cobbler의 미리 컴파일 된 헤더는 시스템 및 외부 라이브러리 만 참조합니다 (솔루션 내부의 헤더 없음). cobblertest 구성 참조 peach.libpeach.libpeachrelease 구성에 의해 만들어진, 그래서 나는되도록 지정 cobbler-test라는 솔루션 구성이되어

  • peach
  • cobblertest 프로젝트 구성을 사용하여 자사의 release 프로젝트 구성을 사용합니다.

cobbler-test 처음부터 (또는 다시 작성하면 & 빌드 등) 제대로 작동합니다. 그때 cobblercrust.cpp라는 소스 파일을 수정하고 빌드하려고한다면, 나는이 오류 얻을하십시오로 구축 된 동일한 솔루션에서 정적 라이브러리를 참조 할 때 다시

c:\...\cobbler\src\crust.cpp(1): error C2859: C:\...\out\cobbler-test.pdb is not the pdb file that was used when this precompiled header was created, recreate the precompiled header.

를에만 발생 현재 프로젝트 구성 이름과 다른 프로젝트 구성 이름. 두 프로젝트 모두 release 또는 debug을 사용하면 증분 빌드가 정상적으로 작동합니다.

처음부터 전체 컴파일을 수행하면 처음에 미리 컴파일 된 헤더를 사용하지 않아도됩니다. 프로젝트의 모든 조합에 대해 추가 프로젝트 구성을 만들지 않고도 증분 테스트 구성을 사용할 수 있습니까?

답변

0

현재이 문제에 대한 나의 해결책은 테스트 구성을 사용하거나 정적 라이브러리를 생성하는 프로젝트를 테스트하기위한 별도의 프로젝트를 만드는 것이 아닙니다. 이렇게하면 모든 종속 프로젝트가 동일한 프로젝트 구성을 사용할 수 있으며 증분 빌드를 수행 할 때 미리 컴파일 된 헤더가 폭발하지 않고 마술을 작동 할 수 있습니다.

이 라이브러리는 정적 라이브러리의 경우 꽤 잘 작동하지만 #pragma comment(lib, ...)으로 쉽게 가져올 수 있기 때문에 독립형 실행 파일을 빌드하는 프로젝트의 경우 약간 문제가 있습니다. 고맙게도, 제 경우에는 대부분의 프로젝트에 테스트가 필요한 많은 것들이 없습니다.