그전 포스팅을 통해 Windwos와 Linux(Ubunte)에서 WxWidget컴파일과 그 운영체제에 맞는 IDE툴을 통해 개발할 수 있는 샘플을 컴파일 해봤습니다. 

전에 Mac에 대해서 컴파일을 콘솔에서는 성공했는데, XCode에서 사용할 수 있는 환경을 설정하지 못해 그동안 글을 포스팅하지 못했는데, 오늘 드디오 XCode에서 컴파일 하는 방법에 성공했습니다. 개인적으로 GUI환경에서 런타임으로 break point 를 걸고 디버깅하는 환경에 목숨거는 경향이 좀 있습니다.
 Mac에서 컴파일 하는 방법이 carbon 을 이용하는 방법과 cocoa 를 이용하는 방법이 있습니다. cocoa를 이용하는 방법은 컴파일이 잘 안되어서 carbon 을 이용하는 방법을 사용했습니다. 

테스트 환경은 
운영체제 OSX 10.6.6
WXWidget :  WxMac-2.8.12
XCode : 4.0.2 

 우선  맥용 wxWidget 을 받아서 콘솔에서 컴파일 해야 합니다. 맥용 wxWidget은 http://wxwidgets.org/downloads/  에서 wxmac 을 다운 받습니다.  적당한 곳에 압축을 푼다음 해당  파일내 install-mac.txt 에 있는 것처럼 컴파일 합니다. 
 
제 경우 콘솔에대 해당 디렉토리를 접근한 후 아래와 같이 했습니다. 
#mkdir build-carbon-debug
#cd build-carbon-debug
#arch_flags="-arch i386"
#../configure CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags" --enable-unicode --enable-debug --disable-shared
 #make

빌드는 후, XCode를 통해 샘플을 컴파일 할 수 있습니다.  XCode 에서 Cocoa Application 으로 새로운 프로젝트를 생성합니다. WxMac을 Cocoa로 컴파일하지 않더라도 사용할 수 있습니다. 그냥 콘솔용(Command Line Tool)로 프로젝트를 구성할 수도 있지만 실행시 포커스가 설정되지 않는다. 그 때문에 따로 추가작업(http://wiki.wxwidgets.org/WxMac-specific_topics#My_app_can.27t_be_brought_to_the_front.21) 이 필요합니다. 특별히 컴파일시 따로 다른 점은 없기 때문에 그냥 Cocoa 프로젝트를 이용합니다.

이미 존재하는 파일 __AppDelegate.h , __AppDelegate.m  , main.m 파일을 삭제합니다. 그리고 maip.cpp를 아래 처럼 적용합니다.
====================
#include "wx/wx.h"
 
class MyApp: public wxApp
{
    virtual bool OnInit();
		
    wxFrame *frame;
};
 
IMPLEMENT_APP(MyApp)
 
 
bool MyApp::OnInit()
{
    frame = new wxFrame(NULL, -1,  wxT("Hello wxWidgets"), wxPoint(50,50), wxSize(800,600));	
    frame->Show();
    return true;
}
================== 

 이제 프로젝트 빌드 설정을 해야 합니다. 

빌드 설정에 필요한 path  들은 wxWidget 자체를 컴파일 했을 때 생성되는 wx-config 파일을 이용해서 path를 알 수 있습니다. wxWidget 을 빌드한 패스(저의 경우 build-carbon-debug 패스안에 )wx-config파일이 생성됩니다. 
 
#./wx-config --cppflags 
#./wx-config --libs


--cppflag 옵션은 X-Code에서 빌드 설정 중 other c flags 에 설정해야 하고,  --libs의 경우 other linking flags 해당 결과값을 넣습니다.  그리고 나서 컴파일 해면 빈 Window가 실행됩니다. (만일 컴파일에 실패한다면 32bit로 수정해서 컴파일합니다.)

 
 sample 들에 대해서도 XCode를 통해 컴파일 할 수 있습니다. 제가 가장 좋아하는 grid 샘플을 예로 들겠습니다. 임시로 만든 main.cpp를 삭제하고 sample 폴더에 있는 griddemo.h, griddemo.cpp 를 복사해서 컴파일 해보면 실행되는 것을 확인 할 수 있습니다. 


작성이 : 승용.한밀
최종수정일 : 2012.03.10
 

http://code.google.com/p/multidbviewer/

구글 코드에 multidbviewer 라는 프로젝트를 생성했습니다. 약 2년간 진행해온 프로젝트 인데 드디오 공개 했습니다.  프로그램은 다양한 db 의 QueryBrowser를 만드는 프로젝트 입니다. 현재 sqlite 에 대해서만 동작하고 있고 좀 버그가 많은 상태입니다. 좀 고쳐야 하는 버그가 많은지라 공개를 할까 말까 고민했었는데, 이러다가는 영영 공개 못할 거라느 생각에 과감히 공개 했습니다. 

 재 블로그에 보면 유난히 wxwidget 과 sqlite 관련 글들이 많은데, 저 프로젝트를 진행하면서 필요한 기술을 습득하면서 올린 글들입니다. 그래서 저 프로그램의 GUI 는 wxwidget 입니다. 제
블로그에 visual studio 나 codeblock 으로 wxwdiget을 컴파일하고 프로젝트를 만드는 것이 나오는데 저 프로젝트 또한 windows 에서 vistual studo 와 mingw+codeblock 조합으로 컴파일 가능하고 ubuntu 에서 codeblock 으로 컴파일 가능합니다. 
 아직 osx 에서 codeblock 이나 xcode 로 wxwidget 을 컴파일 하는 방법을 찾지 못해 mac 에 대한 지원은 업습니다. 콘솔에서 컴파일은 해봤지만 제 프로그램 콘셉이 GUI에서 컴파일 가능한 프로젝트를 구성하는 것도 포함되어 있기 때문에 더 이상 진행하지 않고 있는 상태입니다.


 라이센스는 MPL1.1로 했습니다. 여기에 면책조항이 있습니다. 저 프로그램으로 뭔가 문제가 생겨도 제가 책임을 질 수 없기 때문에 저에게는 중요한 요소 입니다. 이말은 즉, 저 프로그램을 그냥 테스트 용도로만 사용하기 바랍니다. 

  다음 버전에는 cubrid 로 지원하려고 합니다. 현재도 일부 cubrid 지원코드가 들어가 있기는 한데 #define 으로 막아둔 상태입니다.  cubrid 를 지원한다고 해도 그냥 queryBrowser 기능만을 추가할 계획입니다.  뭐, user 를 생성하고 한다든지, 권한을 준다든지는 고려하지 않을 계획입니다. 


 wxwidget을 공부하는데는 꽤 괜찮은 구조라고 자부합니다. wxFromBuilder 을 이용해 화면을 구성했는데 원본 파일도 들어 있고, 툴바 이미지 파일도 들어 있습니다. wxwidet 프로그램을 할 수 있는 환경이라면 컴파일 가능한 코드 입니다. 




 현재 버전은 0.1 이고, 쓸만해질 때 까지는 1.0 으로 올리지 않을 계획입니다. 언제 1.0이 될 수 있을 지 모르겠군요..

 
 이번에는 윈도우즈에서 만든 codeblock 프로젝트를 전체적으로 변경하지 않고, target 을 추가해서 둘다 추가 할 수 있는 방법을 찾아 보도록 하겠습니다.

 저번과 마찬가지로 윈도우즈에서 default 로 프로젝트를 만듭니다. 그리고 빌드 후, 실행해봅니다. 이번에는 모든 설정을 윈도우즈에서 설정해서 리눅스에서는 확인만 하는 방법을 사용하겠습니다.

 project->Properties.. 를 선택하면 Project/targets options 창이 뜹니다. Build targets
사용자 삽입 이미지

에서 오른쪽 Build targets 새롭게 target 을 추가합니다. 모든 설정을 추가하기는 귀찮으므로 Duplication 을 이용해서 Debug 를 복사해서 Linux_Debug 를 만들고, Release 를 복제해서 Linux_Release 를 만듭니다. 그리고 기존에 있는 Debug 나 Release 는 Rename 버튼을 이용해서 Win_Debug, Win_Release 로 변경합니다.
 선택한 target 에 대해 설정할 수 있는 공간이 오른쪽에 있습니다. 각 target 에 맞게 Platforms 를 선택하도록 합시다. Win_Debug, Win_Release 는 Windows 로 Linux_Debug 와 Linux_Relase는 Unix 로 설정합니다. target 별로 object 와 exe 파일들을 따로 나오도록 설정할 수도 있습니다. 저의 경우, 이 기능이 필요 없기 때문에 설정하지는 않겠습니다. OK 버튼을 눌러서 나옵니다.

 이제는 Project->Build options.. 를 눌러  Project build option 창을 띄웁니다. 지난 번( [wxwidget] 08. 윈도우즈에서 만든 codeblock 프로젝트 Ubuntu 에서 컴파일 하기 ) 과 동일하게 Linux_Debug 와 Linux_Release 를 설정하면 됩니다. 프로젝트 전체적으로 설정되어 있는 설정에 대해서는 Win_Debug와 Win_Release 로 설정할 수 있도록 변경해야 합니다. 예를 들어 지난번에 윈도우즈 용이라서 지워라 했던 Compiler Settings 의  Other option  중 
-pipe
-mthreads
[[if (PLATFORM == PLATFORM_MSW && (GetCompilerFactory().GetCompilerVersionString(_T("gcc")) >= _T("4.0.0"))) print(_T("-Wno-attributes"));]]

 같은 설정은 Win_Debug와 Win_Release 에서만 동작하도록 수정합니다.

수정해야 하는 것들은
== compiler Settings 의  Other option  안의 내용 ==
-pipe
-mthreads
[[if (PLATFORM == PLATFORM_MSW && (GetCompilerFactory().GetCompilerVersionString(_T("gcc")) >= _T("4.0.0"))) print(_T("-Wno-attributes"));]]
==================================

== compiler Settings 의  #defines  안의 ==
__GNUWIN32__
__WXMSW__
====================================

== Search directory 의 Compiler 안의 디렉토리 ==
%WXWIN%\include
%WXWIN%\contrib\include
=======================================

== Search directory 의 Resource Compiler 안의 디렉토리 ==
%WXWIN%\include
====================================

그리고 target 을 복제 하면서 생긴 윈도우즈 설정도 지워주어야 합니다.
Linux_Debug 와 Linux_Release 각각에 대해서
Linker Settings 의 Link Library  를 제거해 줍니다.

추가로 리눅스에서 컴파일 가능하도록
Compiler Settings 의 Other options 에서 `wx-config --cflags` 를 추가 합니다.
Linker Setting 에서는 Other Linker Option 에 `wx-config --libs` 를 추가합니다.

이제 설정은 다 끝났습니다.

이 프로젝트를 우분투로 복사해서 리빌드 해 봅니다.
이번에도 역시 dlg->SetIcon(wxICON(aaaa)); // To Set App Icon
라는 곳에서 빌드 오류가 발생하는데 이벤에는
#ifdef __WXMSW__
   dlg->SetIcon(wxICON(aaaa)); // To Set App Icon
#endif
같은 방법으로 우분투만 동작하지 않도록 설정합니다.