제가 활용하고 알고 있는 것 위주로 간략하게 정리해 보았습니다.
GeneralOutput Directory
실제로 빌드된 최종 exe, dll 등을 떨굴 디렉토리를 적어줍니다. 메크로와 같이 사용하면 편리합니다. 상대경로의 기준은 프로젝트 파일(*.vcproj) 의 위치가 기준입니다.
예) ../bin/$(ConfigurationName)/$(ProjectName)/
Intermediate Directory중간 단계 디렉토리를 설정입니다. *.obj 같은 파일이 이쪽으로 떨어지겠죠.
Use of MFC
MFC 등을 사용하실 때 간혹 보면 배포 후 다른 PC 에서 안돌아가는 경우가 있을 겁니다. 이런 경우, MFC 관련 dll 이 해당 시스템에 없는 경우가 많은데요, distributed 를 설치하거나, 이 설정에서 use static 을 설정하시면 MFC 의 정적라이브러리를 사용하기 때문에 실행 파일에 MFC 를 붙여 어디서나 잘 돌아가게 만들어 줍니다. 물론 exe 가 뚱뚱해 지고 매우 비효율적인 방법이긴 합니다만, 상황에 따라서 요긴할 때가 있더군요.
Character Setvs2005 였나.. 이후 부터는 unicode 가 기본이 되었습니다. OutputDebugString("hi"); 이런 소스들이 안돌아 간다는 것이죠. OutputDebugString(L"hi"); 과 같이 그냥 문자열을 unicode 로 사용하거나 OutputDebugStringA("hi"); 처럼 이전의 아스키를 사용하는 방법이 있습니다만, codeproject 등에서 vs6 으로 만들어진 소스를 받아 간단하게 돌려보고 싶은데 아스키 시절에 작성된 녀석이라 unicode 에러를 내면서 빌드가 안된다면 여기서 아스키로 바꾸고 돌려볼 수 있습니다.
DebuggingWorking Directory보통 오픈소스 커뮤니티에 가더라도 대부분 *.user 파일(*.vcproj 와 같은 폴더에 생성되며 바로 이 tab 의 debugging 을 저장하고 있습니다) 은 올리지 않죠. 따라서 단순히 F5 를 눌렀다가는 안돌아 가는 녀석들이 많을 겁니다. vs IDE 의 디버깅 기능을 이용해서 물고 올라갈 때 실행 파일 및 dll 들의 작업 디렉토리를 이 tab 에서 설정 가능합니다. 메크로를 확인해 보시면 이해가 되시겠지만
$(OutPut)
이라고 입력하시면 대부분 만사 형통입니다.
C/C++GeneralAdditional Include Directories인클루드 할 디렉토리를 추가하는 곳입니다. ';' 기호를 사용하여 여러 줄을 입력하거나 편집창을 따로 열어 추가할 수 있습니다. 주희할 점은 원래 시스템이 지원하는 디렉토리(Tools/Options include directory 등) 가 우선순위가 높다는 것입니다.
예) ./;../include;../include/ogre;
Debug Information Format*.pdb 를 선택하는 곳으로 다른 것은 잘 모르는 바, 대부분 기본값인 Program Database 로 두고 사용중입니다.
Warning Level경고 수준인데 기본이 3이죠. 4가 최대인데 이걸로 놓으시면 매우 상세한 경고 메시지까지 출력해 줍니다. 패키지 제품의 경우 특히나 4를 놓고 쓰는 것이 좋다는 이야기를 들었었는데요, 제가 참조하는 외부 라이브러리들이 워낙에 많다 보니, 이쪽으로는 좀 무뎌지더군요.
Optimization
Whole Program Optimization이것이 켜져 있으면 release 시 링크가 느립니다.
Code GenerationEnable String Poolingconst char* myName = "aronze";
와 같은 읽기 전용의 문자열을 pooling 해주는 것으로 알고 있습니다. 켜주는 것이 좋다고 하네요.
Enable Minimal Rebuild재빌드를 최소화하는 장치로 이걸 켜주면 다 빌드해야 하는지 부분만 빌드해야 하는지 IDE 가 트렉킹을 하는 것으로 알고 있습니다.
Runtime Library대부분 원래 설정 그대로 사용하면 문제가 없습니다만, 문제가 있는 경우 google 검색을 통해 여기를 수정해서 해결된 경험이 많이 있습니다. 아직도 정확히 이해하지 못하고 있는 부분입죠.
Floating Point ModelOgre3D 엔진 설정을 보니 release 에서 Fast 로 되어 있어서 저도 Fast 로 쓰고 있습니다..
Precompiled Headers언젠가 블로깅을 했던 기억이 나는 군요.
Command Line위에서 설정한 녀석들은 컴파일시에 컴파일러의 인수로 들어가게 되는데요, 이렇게 설정된 녀석들을 볼 수 있습니다. 아래 Additional options 에 /MP 인가.. 여러개의 CPU 가 같이 빌드할 수 있도록 설정하거나 문제가 되는 상황(obj 파일의 크기가 기본크기를 넘어선 경우 /bigobj, pdb 파일이 기본 크기를 넘어선 경우 /Zm 등) 에서 googling 하여 적절한 녀석을 넣어주곤 합니다.
LinkerGeneralOutput File출력 파일의 경로 및 이름을 바꾸어 줄 수 있습니다.
예) $(OutDir)/OgreMain_d.dll
Enable Incremental Linking증분 빌드 여부 입니다. 증분 빌드가 몬지 정말 많이 들었는데 아직도 명확하게는 모르겠군요. 저는 IncrediBuild 를 사용하고 있어 yes 로 씁니다.
Additional Library DirectoryC/C++ 에도 있던 녀석입니다. 참조 라이브러리들의 경로를 적어줍니다.
InputAdditional Dependencies추가할 dll 의 *.lib 를 등록합니다.
DebuggingGenerate Debug Info이거 release 라고 끄면 디버깅이 안됩니다. 정말 특별한 경우 아니면 켜놓습니다.
Build Events잘 모르는 분이 의외로 많으신 것 같은데 매우 유용한 tab 입니다. 빌드 전, 링크 전, 빌드 후에 실행할 batch 를 삽입할 수 있습니다. Command Line 쪽에 넣어주시면 됩니다.
예)
copy $(OutDir)\$(TargetFileName) ..\..\Samples\Common\bin\$(ConfigurationName)
copy $(OutDir)\$(TargetFileName) ..\..\Tools\Common\bin\$(ConfigurationName)