2004-11-26

Visual Studio Tips

.h <-> .cpp 단축키

Visual Assist 를 사용하시는 분은, [도구]-[옵션]-[환경]-[키보드] 에서 VAOpenOpposite를 Ctrl+Q등으로 단축키를 지정하면 파일 전환을 보다 쉽게 할 수 있다.

Alt + F7

[도구]-[옵션]-[환경]-[키보드]에서 빌드.선택영역빌드를 Alt+F7로 단축키 지정하면, 현재 프로젝트를 키보드만으로 빌드할 수 있다.

외부 도구

레이옷은 현재 솔루션의 각 프로젝트의 산출물(exe,pdb,xml 등)들을 서버에 배포하기 위해서 Python 으로 배포 스크립트를 제작했다. 문제는 이 넘을 실행하기 위해서 꼭 탐색기를 띄워서 찾아가서 실행하는게 너무 귀찮았다는 점. 그러나 [도구]-[외부도구]-[외부명령] 으로 새 명령을 등록할 수 있다. 아래와 같이 등록하면, 이제 파이썬 스크립트를 메뉴에서 실행할 수 있게 된다. 특히 출력창 사용을 선택하면 스크립트의 표준 출력을 Visual Studio 에서 살펴볼 수 있다.

external_tool.JPG

또한 이 명령을 도구모음에 등록하면 더욱 편하다. [도구]-[사용자지정]-[새로만들기]에서 도구바를 하나 만든 다음, [명령] 탭을 눌러 아까 등록한 넘을 [범주]-[도구]-[외부명령N]에서 찾아 드래그 앤 드랍으로 새 도구바로 옮겨 주면 끝. 그나저나, 아이콘을 새로 등록하고 싶지만 어떻게 하는지 모르겠다.

한글폴더/파일

가능하면 사용하지 말라. 레이옷은 빈태군의 권유를 듣고 한쪽귀로 흘리다가 다음과 같은 고생을 하게 되었다.

  • xerces c++ 라이브러리 사용시, XML 파일의 절대 경로를 파싱할 때 한글 폴더가 포함될 경우 [Unicode] 로 경로 문자열을 넘겨야 한다.
  • DevPartner 사용시 디버깅 정보가 찾아지지 않는다.
  • 이 외에도, 프로젝트 폴더명 중에 space 가 포함될 경우에도 항상 $(InputDir) 등의 매크로들을 " " 으로 둘러싸줘야 한다.

정규식

global replace 할 때, 정규식을 사용하면 매우 편리하다. 다음 예를 살펴보자

string strValue = __NODE_TEXT(pStrNode);           // ----> string strValue = pStrNode.ToString();
int iValue = __NODE_INT(pIntNode);                 // ----> int iValue = pIntNode.ToInt();

MSXML 에서 xerces 로 XML 라이브러리를 교체할 때, 위와 같은 코드가 이곳 저곳에 수두룩 했다. 이를 고치기 위해 다음 정규식을 사용했다.




필드 입력
Find __NODE_TEXT({.+})
Replace {{{\1.ToString()}}}

  • () 의 경우 backslash escape 를 해줘야 한다
  • .+ 는 설명안해도 알 듯?? ㅋㅋ
  • 특정 패턴을 replace 에서 사용하려면 {패턴}으로 검색하고, (발견순서대로) \N 으로 사용하면 된다
  • replace 는 정규식이 아니니깐 막 써도 된다

일반 문자열 "xxx" 를 _T("xxx") 로 바꾸는 정규식

필드 입력
Find \"{:Al@}\" (단, 문자열 가운데 ' ' 또는 '_' 가 있을 경우 인식이 안된다.)
Replace _T("\1")

빌드 이벤트

UnitTest나 EventLog 를 위한 Message DLL 등을 만들 때 사용되는 사용자 지정 빌드 단계에 대해서 알아보자. 우선, MSDN 에 나오는 Visual Studio 빌드 이벤트 및 사용자 지정 빌드 단계의 순서는 다음과 같다.

  • '''빌드 전 이벤트'''
  • 개별 파일에 대한 사용자 지정 빌드 단계
  • 프록시 생성기
  • MIDL
  • 리소스 컴파일러
  • C/C++ 컴파일러
  • '''링크 전 이벤트'''
  • 링커 또는 라이브러리 관리자(해당되는 경우)
  • BSCMake
  • 프로젝트에 대한 사용자 지정 빌드 단계
  • 웹 배포 도구
  • '''빌드 후 이벤트'''

UnitTest를 자동으로 실행하게 하려면, '''프로젝트 사용자 지정 빌드 단계''' 또는 '''빌드 후 이벤트'''가 적절하다.

Command Line Build

특이하게도 한 순간에 한가지 프로젝트, 한가지 빌드 타겟만이 가능하다. 결국 여러 개의 프로젝트를 함께 빌드하려면 각각을 따로 명시해야 할 듯. /out 의 경우 이전 파일에 로그를 append 한다.

devenv /project /build /out


comments powered by Disqus