VS2017과 VS2015가 모두 설치되어 있을 경우에 vcpkg를 통해 install을 하면 자동으로 VS2017로 빌드를 수행하게 된다. 이를 VS2015에 연결하여 개발할 경우, 링크는 잘되는데 런타임에서 말도 안되는 크래시가 나는 등의 패닉을 맞을 수 있다.
이를 막기 위해 트릭을 좀 써야 하는데...
아래와 같이 vcpkg 자체에 약간 수정을 가하면 된다.
다만, 이 방법은 2018/11/06 현재까지만 유효하고 앞으로는 어떻게 변할지 알 수 없다. vcpkg는 능동적으로 개발 중인 프로젝트다.
b084ab0103ad07f2f9000805b68d7202a231a248 commit 기준으로 vcpkg설치폴더/scripts/bootstrap.ps1 을 열어서
...
if ((Test-Path $clExe) -And (Test-Path $vcvarsallbat))
{
$results.Add("PreferenceWeight1::Legacy::14.0::$installationPath") > $null
}
$results.Sort()
#$results.Reverse() <-- 여기를 막는다.
return $results
}
원리는 간단하다. bootstrap 스크립트가 VS2015, VS2017의 설치 경로를 체크하여 results에 넣는데, sort를 하면 2015(14), 2017(15) 순서로 정렬이 되고, reverse를 하여 2017, 2015로 역배열을 만든다. 바로 그 부분을 막은 것이다.
이렇게 하면, vcpkg는 lib 빌드 시 2015를 먼저 참조할 수 있게 된다.
※ 이전 블로그의 포스트임(2018/11/6)