준비물 : http://googletest.googlecode.com/files/gtest-1.6.0.zip
위 링크를 통해 gtest-1.6.0.zip 받아서 압출을 풀자.
압축을 풀면, \gtest-1.6.0\msvc 라는 폴더가 있는데, 거기에 빌드할 수 있는 .vcproj 파일이 있다.
우리는 multi-debug을 이용한 lib을 사용해야 하기때문에 gtest-md.vcproj를 열어 .vcxproj파일을 만들고
[Build]->[Batch build...]로 gtest-md 와 gtest_main_md 의 Debug와 Release를 선택해서 빌드 한다.
빌드 이후, 아래와 같은 폴더에 2개씩 lib이 생성된걸 볼수 있을것이다.
\gtest-1.6.0\msvc\gtest-md\Debug
\gtest-1.6.0\msvc\gtest-md\Release
우리는 lib이 위치한 폴더와 include가 위치한 폴더를 적용하면 된다.
\gtest-1.6.0\include
이제 새로운 프로젝트를 열어 콘솔 프로젝트를 만든다.
메인cpp파일에 _tmain() 필요없다.
이미 gtest_main_md.lib 안에는 main()도 포함되어있다.
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
를 지우고,
속성( property page)를 열어
[C/C++]->[General]->[Additional Include Directories]에
\gtest-1.6.0\include의 위치를 저장한다.
[Linker]->[General]->[Additional Library Directories]에
현재 사용할 lib파일의 위치를 저장한다.
C:\gtest-1.6.0\msvc\gtest-md\Debug
vs2008이하 버전에서는 [도구]->[옵션]을 선택하여 아래와 같이 세팅
Linker->Input->Additional Dependencies에
gtest_main-mdd.lib과 gtestd.lib을 설정
위와 같이 세팅하고, [Ctrl]+[F5]를 눌러보자.
위와 같이 하면 기본적인 gtest를 할수 있는 환경이 되어있는 상태이다.
일반적으로 vc++ 6으로 작업되어있는 파일을 업데이트해서 vs2010로 컴파일을 하면,
3>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(1151,5): warning MSB8012: TargetPath(D:\4.work_prj\apr-util-1.3.10\LibD\aprutil.lib) does not match the Library's OutputFile property value (D:\4.work_prj\apr-util-1.3.10\LibD\aprutil-1.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
3>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(1153,5): warning MSB8012: TargetName(aprutil) does not match the Library's OutputFile property value (aprutil-1). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
위와 같은 에러가 나온다.
해당 프로젝트를 Solution Explorer에서 선택해서 -> 프로퍼티 -> Linker 에 세팅되어있는
Output File 을 $(OutDir)$(TargetName)$(TargetExt) 로 설정하면 된다.
요즘 들어 공부에대한 욕구가 다시 치솟고 있다.
부족함을 느껴서 인가?
방통대 컴공과도 생각해보고
일반 교육기관에서 심화 교육도 생각해보고 있다.
어차피 경력직이라 실용적인 면에서는 교육기관에서 심화 교육을 받는게 현명한건 아닌가 생각해본다.
Advanced C++
http://www.ioacademy.co.kr/curriculum/curri.htm?id=14&curri_id=23
2월부터 주말에 한다고 하니, 빨리 생각해 봐야겠다.
전 회사 팀장으로 부터
현 회사 팀장으로 부터
읽기를 권유(?)받은 책이다.
책이 워낙에 두꺼웠고 내가 원해서 읽는 책이 아니고,
책을 봤을때 느낌이 초짜 개발자들이 읽는 책이겠구나 라는 생각이 들었다.
하지만 초짜다...
읽어 봐야겠다.
가장 기본이 되는 내용도 인지 하지 못한 부분이 있는것 같다.
아...
리눅스에선 잘되는데
int nSize = 0;
char szID[20] = {0,};
strncpy( szID, "생", 20 );
nSize = strlen( szID );
for( size_t i = 0 ; i < nSize ; i++ ){
if( isspace( szID[ i ] ) )
return false;
}
false 된다....
=> iswspace 쓰자!!
테이블의 내용 통체로 복사하는 경우
SELECT * INTO YourTable FROM MyTable
이런식으로 사용하는데
'MyTable' 테이블, 'nAge' 열에 NULL 값을 삽입할 수 없습니다. 열에서 null을 사용할 수 없습니다. INSERT이(가) 실패했습니다.
문이 종료되었습니다.
이런 예매한 에러 메세지를 경험 한적이 있을 것이다.
SELECT * INTO 형식은 새로운 테이블을 생성해서 그안에 데이터를 넣어주는데...
constraint, index, trigger 는 복사되지 않는다.
원본 테이블에 Default를 설정한 한 경우
새로 생성된 테이블에는 설정값이 적용되지 않아 난해한 경우가 발생한다.
그래서 구글링을 해본결과...
1. 쿼리분석기에 DDL 정보를 가져와 실행하고
2. INSERT INTO MyTable SELECT * FROM YourTable
로 작업하쟈~
이 글은 스프링노트에서 작성되었습니다.
지난 6월 11일 회사 연차를 쓰고 씨퀄관련 행사에 참관했다.
실질적으로 회사업무와는 어느정도 거리는 있지만,
1. 관련이 아예 없는 분야는 아니다.
2. 무료행사이다
3. 금요일날 연차에 구실을 마련하고 싶었다...
정도의 이유로 참관하게 되엇다~ :)
생각보다 많은 사람들이 참관하였고, 의외였던 건 NCSoft, EastSoft, Gravity 등등 게임회사에서도 많은 사람들이 와서 참관하엿고 QnA시간에 다양한 질문도 했다는 내용이다.
강의 내용은 각 강의마다 Level를 두어 강습내용에 대해 자세히 모르더라도 어느정도 수준인지 알수 있었다.
행사는 PASS 정원혁 대표의 환영사로 시작하였는데, "행복한 IT"가 되기 위해 필요한 3가지에 대해 연설하였는데(1.의사소통, 2. Back to the Basic 3. 취미 = 직업, 4. 나눔의 미학) DBA에 만 ㅣ이 필요한 내용이 아니라 모든 프로그래머에게 필요한 내용인것 같아 작은 자극이 되엇다.
이어지는 이랜드, 잡코리아 DBA와의 패턴 방식의 대용량 SAP? 운영사례도 많은 도움이 되었고
단순히 책에서만 보아오던 코더로서의 DB작업 이외에 아키텍쳐관점에선 어떤게 중요할까라는 생각의 폭이 넓어졌다.
늦게 와서 도시락 식사권으로 점심을 먹었는데 도련님 도시락 이상 맛과 영양이 가득한 점심이었당~ :)
마지막으로 누군가 QnA 시간에 '초크 토크'로 "TOP 1"명령을 했을때와 "TOP 2.3.4.5.6....."명령을 할때 왜 속도차이가 많이 나는가에 대해 질문내용을 답변을 올려본다.