yuchi's Development Home
C#이랑 WEB프로젝트만 vs2013을 쓰고 C++프로젝트는 vs2010을 쓰고 있었는데 큰맘먹고 싹 vs2013으로 이전했다.
OK버튼만 클릭하면 완전 클리하게 될 줄 알았는데 그건 희망사항이고 완전 클린하게 이전은 안된다.
대체로 클릭만으로 끝나지만 asm코드가 섞여있거나 문자 체계가 MBCS인데 MFC 프로젝트라던가, DirectX를 사용했거나 하면 문제가 조금씩 생긴다.
컴파일 해보면 deprecated 경고를 적지 않게 보게 되는데 이게 후달리게 되는 주요 요소중 하나..
PC용 온라인 서비스하는 회사들은 MFC많이 쓸거고 그 중 상당수는 꽤나 레거시 코드로 UNICODE기반이 아닐 것이다. 일단 MFC에서 MBCS지원 안한다는 메시지가 충격과 공포. UNICODE로 바꾸라고 나오는데 VS2013용 MBCS익스텐션 깔면 일단 빌드는 할 수 있다.
GetVersionEx()같은 함수들이 deprecated 되었다고 나옴. 나도 이런 함수 쓰고 싶지 않았는데 XP랑 호환성 땜에 사용했던거다. XP를 날려버리고자 하는 MS의 의지를 읽을 수 있다. 지원 중단안 OS의 API는 이후 컴파일러에서도 사용 못하게 하겠다는...
그 외에 DX SDK랑 충돌하는 문제가 있다.
Windows SDK 8.1에 포함된 DXSDK는 D3DX를 사용하지 않기 때문에 오픈소스로 제공되는 DirectXTex를 사용하던지 기존 SDK에서 D3DX를 꺼내와야됨. DirectXTex는 무척 추천할만한 라이브러리지만 멀쩡히 잘 돌던 프로젝트에서 D3DX를 걷어내고 DirectXTex로 교체한다는게 어떤 의미인지 온라인 게임 유지해본 사람들이라면 잘 알겠지.
어쨌건 간단한 일은 아니다.
컴파일은 되더라도 Windows SDK 8.1과 DXSDK(june 2010)의 헤더파일이 충돌해서 수많은 warning을 보게 된다. 어찌어찌 하면 피해갈 수 있는데 프로젝트중 한 개는 아직 warniing을 제거하지 못했다.
ML64로 어셈블하던 ASM파일이 어셈블에 실패하기도 하고. 크게 두 가지 문제가 있었는데 PROC,ENDP조합으로 함수를 만들었을때 사용하지 않는 인자가 있으면 에러로 처리한다. vs2010의 ML64에선 잘 넘어갔었다.
그리고 asm파일이 프로젝트 바깥의 다른 폴더에 존재하는 경우도 어셈블 실패.
상황이 전혀 다르지만 두 경우 모두 asm파일의 프로퍼티에서 Warning Level을 3에서 2로 조정하면 어셈블 된다.
우여곡절 끝에 일단 이전은 완료했는데 무사히 잘 돌아가는지 100% 확신은 못하겠다.
서비스 한달도 안남았는데 이거 잘 하는 짓인건지.
더 늦기전에 해야겠다는 생각 땜에 저지르긴 했는데 자살행위 아닌가 모르겠다.
댓글 '2'
음..우선 소스컨트롤에서 diff기능이 엄청 좋습니다. 진짜 편합니다. 비교하다가 즉석에서 코드 고칠수도 있고요.
배열의 경우 vs2013이 sse나 avx를 이용해서 벡터라이즈를 해줍니다. 다소의 성능 향상이 있겠죠.
arm용 코드 빌드가 가능하고요.
인텔리센스가 압도적으로 강력해졌습니다. 귀찮을 정도로 적극적인데요 일단은 2010보다 강력한건 사실입니다.
directx 프로파일링 기능이 있습니다. 이거 꽤 괜찮네요.
뭐 대략 이 정도?
사실 제 경우는 2013이 압도적으로 좋아서라기보다 Windows Store App으로도 출시할 계획이기 때문에 그 준비 단계라고 볼 수 있네요.
2013으로 이전하는걸 강력하게 권장하는건 아니지만 언젠가 해야될거 빨리 하는게 낫지 않을까 생각합니다.
VS2010,WIN32,C/C++로 개발하고 있습니다.
2013으로 이전할 만한 메리트가 무었이 있을까요?