본문 바로가기

Developement

WxWidget(v2.8.12) 와 CodeBlocks 연동 하기.

일단 이 글은 CodeBlocks 가 뭔지 알고, WxWidget 이 대충 뭔지는 아는 사람에게 유용한 글임을 먼저 밝히는 바 입니다.
사실 CodeBlocks 만 알고, WxWidget 을 모르는 경우가 더 맞는 말 이겠네요.

먼저, 프로젝트 생성시 WxWidget 이 기본으로 설정 안된 상태에서 다음과 같은 것이 뜹니다.
Wx 의 환경변수를 맞춰 달라는 말 입니다.
"멍-" 해 지죠.

이제 해야 할 것은 먼저 WxWidget 소스를 받아 오는 것 입니다.
2011년6월20일 기준, 마지막 릴리즈 버젼이 2.8.12 이니, 다음 위치에서 WxWidgets-2.8.12.zip 을 받습니다.
(저는 WxX11 을 받았는데, 컴파일이 되더군요 .... 용량 차이가 조금 있던데 ..)

다음으로 해야 하는 것인 ..
이것이 소스만 존재 하므로 라이브러리를 만들던, DLL 을 만들던 뭔가 해야 합니다.
콘솔을 하나 엽니다.

어렵지 않습니다. ... 모르겠다는 분은 이 글을 봐도 이해가 안갈테니 여기쯤에서 다른 글을 찾으시거나, 다른 분이 쓴 글을 보시는 것이 더 맞아 보입니다 ... (정말 입니다)

여기서 mingw 가 설치 되어 있어야 합니다.
그리고 환경 변수에 mingw 의 bin 위치가 설정 되어 있어야 합니다.
그래서 다음과 같이 gcc 를 입력시 구동이 되어야 합니다.

이제 WxWidget 을 빌드 할 준비가 완료 되었습니다.

아까 받은 WxWidget 을 원하는 위치에 압축을 풉니다.
저는 CodeBlocks 뒤에 WxWidgets2.8.12 를 만들었습니다.

= 주의사항 =
이후에 발견 된 문제점 입니다만, 폴더 이름에 space 가 들어 가 있으면 CodeBlocks 에서 gcc 에 넘길때 오류가 생깁니다.
그래서 include 위치는 space 가 없는 위치로 지정을 하시는 것이 좋을 듯 합니다.
(아니면 일일히 environment 를 수정 해야 함)


이제 WxWidgets 소스가 있는 위치로 가, build\msw 로 이동 합니다.


이제 해야 할 것은 "무엇을 빌드 할 것인가?" 입니다.
WxWidget 은 Release/Debug 모드로 각각 DLL 과 static-LIB 으로 빌드 할 수 있습니다.

여기서 중요한 것은 WxWidget 에서 한글과 같이 2byte 언어를 쓰려면 UNICODE 를 사용해야 합니다.
이로 인해 WxWidget 관련 프로젝트들은 모두 UNICODE 지정을 해 주셔야 합니다.
NT 커널은 기본적으로 Unicode 로 설계 되었으므로, Windows2000 이후의 OS 를 쓰시는 분들이라면 UNICODE 사용을 하시는 것이 정상이겠습니다. 이점 먼저 명심해 주셔야 합니다.

빌드 옵션은 다음과 같이 존재 합니다.

mingw32-make -f makefile.gcc SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=release
mingw32-make -f makefile.gcc SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=debug

이 옵션은 DLL 을 생성하며, MONOLITHIC  을 함께 사용하는 것 입니다.
MONOLITHIC 이 사실 정확히 어떤 역활을 하는 것 인지는 모르겠습니다만, DLL 생성시엔 이걸 사용하는 것이 좋다고 하는군요. (제 생각엔 thread-safe 과 같은 역활을 하는게 아닐까 합니다)

mingw32-make -f makefile.gcc SHARED=1 UNICODE=1 BUILD=release
mingw32-make -f makefile.gcc SHARED=1 UNICODE=1 BUILD=debug

이 옵션 역시 DLL 을 만드는 옵션 입니다.
SHARED가 1 이 되어 toggle 되는 경우 이기 때문에 동일하게 DLL 을 생성 합니다.
하지만 이 옵션 보다는 MONOLOTHIC 을 추가 해서 쓰는 것을 추천 합니다.

mingw32-make -f makefile.gcc SHARED=0 UNICODE=1 BUILD=release
mingw32-make -f makefile.gcc SHARED=0 UNICODE=1 BUILD=debug

마지막 옵션은 static-lib 을 만듭니다.
역시 DLL 이 아니라 컴파일시 바이너리에 함께 들어 가는 static-lib이 만들어 지므로 별도의 WxWidgets 에서 필요한 DLL 을 함께 배포할 필요가 없어지긴 합니다.
다만, 컴파일시 시간이 걸리고, 실행파일은 크기가 커지는 단점이 있습니다.

일단 저는 개인적으로 선호하는 static-lib 을 만들었습니다.
다음과 같이 길게 쳐 줍니다.

컴파일이 정상적으로 완료 되면 다음과 같이 아무런 error 메시지 없이 종료 되게 됩니다.


이 과정은 release 한번, 디버그 한번씩 총 두번을 수행 해 주어야 합니다.
그런다음 CodeBlocks 의 환경 변수에 딱하나, Base 에 아까 압축을 푼 위치를 지정 해 줍니다.


그리고 한 번 더 WxWidget 의 올바른 위치를 지정하라고 뜨는 경우엔, 다시 한번 아까 압축을 해제 한 위치를 지정 해 줍니다.
그리고 WxWidgets Library Settings 가 뜨게 되면,

빌드한 환경에 따라 지정을 해 줘야 합니다.
저의 경우는 static-lib 으로 빌드 했기 때문에 Use wxWidgets DLL 항목과, wxWidgets is built as a monolithic library 가 해당 되지 않습니다.

오류사항
wxWidgets 어플을 빌드시 다음과 같은 오류가 발생 하더군요.

 확인을 해 보니, Program Files (x86) 과 같이 긴 이름이 들어 가면 Codeblocks 가 path를 "" 로 묶어 주지 않아 오류가 생깁니다.
어쩔수 없이 C:\나 D:\ 의 root path로 옮겨야 하더군요.
이점 확인 해 야 할 것 같습니다.

완료.
컴파일이 정상적으로 완료 되면 (static-lib 일 경우 꽤 시간이 걸림), 다음과 같이 구동되는 것을 확인 할 수 있습니다.

 
_ps_
바이너리 크기
기본 샘플 wxWidget 의 경우 debug 일 경우 약 18MB. release 빌드시 1.8MB 로 10배 가량 차이 납니다.
디버그 심볼의 크기가 매우 많은 양을 차지 하는 듯 합니다.