Ubuntu with wxWidgets
jjuiddong
wxWidgets 설치
- wxWidgets 설치
- wxWidgets 3.0.2 를 설치한다.
- http://www.tarsiersoft.com/addinfo/wxWidgetsInstall.php 문서를 참고하자.
- ../configure 를 이용해서 옵션을 설정할 수 있다. (이 방식은 모든 리눅스 셋업에서 쓰인다.)
- 설정할 옵션이 없더라도, ../configure 를 실행해야 상황에 맞게 빌드 셋업 파일들이 만들어진다.
- mkdir 을 통해 폴더를 생성해서, 그 안에서 빌드를하면, 결과 파일들이 그 폴더안에 저장된다.
- 즉, 여러 방식을 빌드를 폴더별로 나눠저 관리할 수 있다. 예를들어, debug, release 빌드들을 나눌 수 있다.
- wx-config 명령어로 현재 wxWidgets 빌드 상태를 확인할 수 있다.
- make로 빌드할 때는 문제없지만, make install 명령에서부터는 관리자 계정으로 실행해야 한다.
su password ~ mkdir buildr cd buildr ../configure make make install ldconfig
Makefile 만들기.
- 우선 sample에 있는 makefile을 가져와서 수정하면서 쓰자.
- Makefile 매크로들
- top_srcdir : wxWidgets 경로
- src_dir : 현재 소스파일 경로. Makefile 파일에서 상대경로를 뜻하며, 현재 같은 위치에 있기 때문에 . 로 설정된다.
- CXX : 컴파일 버젼
- CXXFLAGS : 컴파일 옵션
- wx_top_builddir: wxWidgets 경로 (top_srcdir 과 같은 용도로 쓰이고 있어서, 정리가 필요하다)
- 신경써서 수정해야 될 부분
- srcdir
- sample하고 소스파일 경로가 다르니 수정해야 한다.
- top_srcdir
- 현재 프로젝트 소스에서, 상대경로로 wxWidgets 라이브러리 경로를 설정해주자.
- ~OBJECTS
- 새 파일이 추가될 때마다, 파일이름을 추가하자.
- 소스 의존성 관계를 파일이 추가될 때마다, 추가하자.
- srcdir
- 예제 Makefile
# ========================================================================= # This makefile was generated by # Bakefile 0.2.9 (http://www.bakefile.org) # Do not modify, all changes will be overwritten! # ========================================================================= prefix = /usr/local exec_prefix = ${prefix} datarootdir = ${prefix}/share INSTALL = /usr/bin/install -c EXEEXT = WINDRES = SETFILE = NM = nm BK_DEPS = /home/odroid/work/wxWidgets-3.0.2/buildr/bk-deps srcdir = . top_srcdir = ../../wxWidgets-3.0.2 LIBS = -lz -ldl -lm LDFLAGS_GUI = CXX = g++ CXXFLAGS = -DWX_PRECOMP -pthread -O2 -fno-strict-aliasing -pthread -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/libpng12 -pthread -I/usr/local/include/pango-1.0 -I/usr/include/gtk-unix-print-2.0 -I/usr/include/gtk-2.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/lib/arm-linux-gnueabihf/gtk-2.0/include -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz -fvisibility=hidden -fvisibility-inlines-hidden CPPFLAGS = -D_FILE_OFFSET_BITS=64 -I${wx_top_builddir}/lib/wx/include/gtk2-unicode-3.0 -I${top_srcdir}/include -pthread -I/usr/local/include/pango-1.0 -I/usr/include/gtk-2.0 -I/usr/lib/arm-linux-gnueabihf/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz -pthread -I/usr/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib- 2.0/include -I/usr/include/libxml2 LDFLAGS = -pthread WX_LIB_FLAVOUR = TOOLKIT = GTK TOOLKIT_LOWERCASE = gtk TOOLKIT_VERSION = 2 TOOLCHAIN_FULLNAME = gtk2-unicode-3.0 EXTRALIBS = -pthread -Wl,--version-script,$(wx_top_builddir)/version-script -lz -ldl -lm EXTRALIBS_XML = -lexpat EXTRALIBS_GUI = -pthread -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lfreetype -lgthread-2.0 -lglib-2.0 -lX11 -lXxf86vm -lSM -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lpng -lz -ljpeg -ltiff CXXWARNINGS = -Wall -Wundef -Wunused-parameter -Wno-ctor-dtor-privacy -Woverloaded-virtual HOST_SUFFIX = SAMPLES_RPATH_FLAG = -Wl,-rpath,$(wx_top_builddir)/lib wx_top_builddir = /home/odroid/work/wxWidgets-3.0.2/buildr ### Variables: ### DESTDIR = WX_RELEASE = 3.0 WX_VERSION = $(WX_RELEASE).2 LIBDIRNAME = $(wx_top_builddir)/lib MINIMAL_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) \ $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \ -I$(srcdir) $(__DLLFLAG_p) -I$(srcdir)/../../samples $(CXXWARNINGS) \ $(CPPFLAGS) $(CXXFLAGS) MINIMAL_OBJECTS = \ $(__font___win32rc) \ $(__font_os2_lib_res) \ TP-CAMPro.o \ stdafx.o \ CLApp.o \ CLFrame.o \ MainPanel.o \ OperatorSetPanel.o \ Bitmap3Button.o \ Bitmap3ButtonEx.o \ Bitmap2Button.o \ Bitmap2ButtonEx.o \ CameraFullPanel.o \ CameraSetPanel.o \ DateSetPanel.o \ EnforcementFullPanel.o \ EnforcementPanel.o \ EnforcementSetPanel.o \ FileMngFullPanel.o \ FileMngPanel.o \ LoginPanel.o \ BatteryDisplay.o \ DateDisplay.o \ KeyboardDialog.o \ KeyboardEngPanel.o \ MoviePanel.o \ Global.o \ NumberPadDialog.o \ NumberPadPanel.o \ Controller.o SRCS = $(MINIMAL_OBJECTS:.o=.cpp) ### Conditionally set variables: ### #CXXC = $(CXX) CXXC = $(BK_DEPS) $(CXX) #PORTNAME = base PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) #WXBASEPORT = _carbon #WXDEBUGFLAG = d WXUNICODEFLAG = u #WXUNIVNAME = univ EXTRALIBS_FOR_BASE = $(EXTRALIBS) #EXTRALIBS_FOR_BASE = $(EXTRALIBS) \ # $(EXTRALIBS_XML) $(EXTRALIBS_GUI) EXTRALIBS_FOR_GUI = $(EXTRALIBS_GUI) #EXTRALIBS_FOR_GUI = __font___mac_setfilecmd = @true #__font___mac_setfilecmd = \ # $(SETFILE) -t APPL font$(EXEEXT) #__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__ #__WXUNIV_DEFINE_p_2 = --define __WXUNIVERSAL__ #__DEBUG_DEFINE_p = -DwxDEBUG_LEVEL=0 #__DEBUG_DEFINE_p_2 = --define wxDEBUG_LEVEL=0 #__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS #__EXCEPTIONS_DEFINE_p_2 = --define wxNO_EXCEPTIONS #__RTTI_DEFINE_p = -DwxNO_RTTI #__RTTI_DEFINE_p_2 = --define wxNO_RTTI #__THREAD_DEFINE_p = -DwxNO_THREADS #__THREAD_DEFINE_p_2 = --define wxNO_THREADS __DLLFLAG_p = -DWXUSINGDLL __DLLFLAG_p_2 = --define WXUSINGDLL COND_PLATFORM_OS2_1___font___os2_emxbindcmd = $(NM) TP-CAMPro$(EXEEXT) | if grep -q \ pmwin.763 ; then emxbind -ep TP-CAMPro$(EXEEXT) ; fi #__font___os2_emxbindcmd = $(COND_PLATFORM_OS2_1___font___os2_emxbindcmd) #__RCDEFDIR_p_1 = --include-dir \ # $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME) #__font___win32rc = font_sample_rc.o #__font_os2_lib_res = \ # $(top_srcdir)/include/wx/os2/wx.res #__font_app_Contents_PkgInfo___depname \ # = font.app/Contents/PkgInfo #__font_bundle___depname = font_bundle #____font_BUNDLE_TGT_REF_DEP = \ # $(__font_app_Contents_PkgInfo___depname) #____font_BUNDLE_TGT_REF_DEP \ # = $(__font_app_Contents_PkgInfo___depname) #____font_BUNDLE_TGT_REF_DEP \ # = $(__font_app_Contents_PkgInfo___depname) #____font_BUNDLE_TGT_REF_DEP \ # = $(__font_app_Contents_PkgInfo___depname) #____font_BUNDLE_TGT_REF_DEP = \ # $(__font_app_Contents_PkgInfo___depname) COND_MONOLITHIC_0___WXLIB_CORE_p = \ -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) __WXLIB_CORE_p = $(COND_MONOLITHIC_0___WXLIB_CORE_p) COND_MONOLITHIC_0___WXLIB_BASE_p = \ -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) __WXLIB_BASE_p = $(COND_MONOLITHIC_0___WXLIB_BASE_p) COND_MONOLITHIC_1___WXLIB_MONO_p = \ -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) #__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p) #__LIB_SCINTILLA_IF_MONO_p \ # = \ # -lwxscintilla$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) #__LIB_TIFF_p \ # = \ # -lwxtiff$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) #__LIB_JPEG_p \ # = \ # -lwxjpeg$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) #__LIB_PNG_p \ # = \ # -lwxpng$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) #__LIB_ZLIB_p = \ # -lwxzlib$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) COND_wxUSE_REGEX_builtin___LIB_REGEX_p = \ -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) __LIB_REGEX_p = $(COND_wxUSE_REGEX_builtin___LIB_REGEX_p) #__LIB_EXPAT_p = \ # -lwxexpat$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) ### Targets: ### all: TP-CAMPro$(EXEEXT) $(__font_bundle___depname) install: uninstall: install-strip: install clean: rm -rf ./.deps ./.pch rm -f ./*.o rm -f TP-CAMPro$(EXEEXT) rm -rf font.app distclean: clean rm -f config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile TP-CAMPro$(EXEEXT): $(MINIMAL_OBJECTS) $(__font___win32rc) $(CXX) -o $@ $(MINIMAL_OBJECTS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(LDFLAGS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) $(LIBS) $(__font___mac_setfilecmd) $(__font___os2_emxbindcmd) #font.app/Contents/PkgInfo: font$(EXEEXT) $(top_srcdir)/src/osx/carbon/Info.plist.in $(top_srcdir)/src/osx/carbon/wxmac.icns # mkdir -p font.app/Contents # mkdir -p font.app/Contents/MacOS # mkdir -p font.app/Contents/Resources # # # sed -e "s/IDENTIFIER/`echo $(srcdir) | sed -e 's,\.\./,,g' | sed -e 's,/,.,g'`/" \ # -e "s/EXECUTABLE/font/" \ # -e "s/VERSION/$(WX_VERSION)/" \ # $(top_srcdir)/src/osx/carbon/Info.plist.in >font.app/Contents/Info.plist # # # /bin/echo "APPL????" >font.app/Contents/PkgInfo # # # ln -f font$(EXEEXT) font.app/Contents/MacOS/font # # # cp -f $(top_srcdir)/src/osx/carbon/wxmac.icns font.app/Contents/Resources/wxmac.icns #font_bundle: $(____font_BUNDLE_TGT_REF_DEP) font_sample_rc.o: $(srcdir)/../../samples/sample.rc $(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2) $(__DEBUG_DEFINE_p_2) $(__EXCEPTIONS_DEFINE_p_2) $(__RTTI_DEFINE_p_2) $(__THREAD_DEFINE_p_2) --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p_1) --include-dir $(top_srcdir)/include .cpp.o: $(CXXC) $(MINIMAL_CXXFLAGS) -g -c $< TP-CAMPro.o: $(srcdir)/TP-CAMPro.cpp $(srcdir)/CLApp.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h stdafx.o: $(srcdir)/stdafx.cpp $(srcdir)/stdafx.h CLApp.o: $(srcdir)/CLApp.cpp $(srcdir)/stdafx.h CLFrame.o: $(srcdir)/CLFrame.cpp $(srcdir)/stdafx.h MainPanel.o: $(srcdir)/MainPanel.cpp $(srcdir)/CLFrame.h $(srcdir)/Bitmap3Button.h $(srcdir)/BatteryDisplay.h $(srcdir)/DateDisplay.h $(srcdir)/stdafx.h OperatorSetPanel.o: $(srcdir)/OperatorSetPanel.cpp $(srcdir)/CLFrame.h $(srcdir)/stdafx.h Bitmap3Button.o: $(srcdir)/Bitmap3Button.cpp $(srcdir)/Bitmap3Button.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h Bitmap3ButtonEx.o: $(srcdir)/Bitmap3ButtonEx.cpp $(srcdir)/Bitmap3ButtonEx.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h Bitmap2Button.o: $(srcdir)/Bitmap2Button.cpp $(srcdir)/Bitmap2Button.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h Bitmap2ButtonEx.o: $(srcdir)/Bitmap2ButtonEx.cpp $(srcdir)/Bitmap2ButtonEx.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h CameraFullPanel.o: $(srcdir)/CameraFullPanel.cpp $(srcdir)/CameraFullPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h CameraSetPanel.o: $(srcdir)/CameraSetPanel.cpp $(srcdir)/CameraSetPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h DateSetPanel.o: $(srcdir)/DateSetPanel.cpp $(srcdir)/DateSetPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h EnforcementFullPanel.o: $(srcdir)/EnforcementFullPanel.cpp $(srcdir)/EnforcementFullPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h EnforcementPanel.o: $(srcdir)/EnforcementPanel.cpp $(srcdir)/EnforcementPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h EnforcementSetPanel.o: $(srcdir)/EnforcementSetPanel.cpp $(srcdir)/EnforcementSetPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h FileMngFullPanel.o: $(srcdir)/FileMngFullPanel.cpp $(srcdir)/FileMngFullPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h FileMngPanel.o: $(srcdir)/FileMngPanel.cpp $(srcdir)/FileMngPanel.h $(srcdir)/CaptureImage.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h LoginPanel.o: $(srcdir)/LoginPanel.cpp $(srcdir)/LoginPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h BatteryDisplay.o: $(srcdir)/BatteryDisplay.cpp $(srcdir)/BatteryDisplay.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h DateDisplay.o: $(srcdir)/DateDisplay.cpp $(srcdir)/DateDisplay.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h KeyboardDialog.o: $(srcdir)/KeyboardDialog.cpp $(srcdir)/KeyboardDialog.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h KeyboardEngPanel.o: $(srcdir)/KeyboardEngPanel.cpp $(srcdir)/KeyboardEngPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h MoviePanel.o: $(srcdir)/MoviePanel.cpp $(srcdir)/MoviePanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h Global.o: $(srcdir)/Global.cpp $(srcdir)/Global.h $(srcdir)/stdafx.h NumberPadDialog.o: $(srcdir)/NumberPadDialog.cpp $(srcdir)/NumberPadDialog.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h NumberPadPanel.o: $(srcdir)/NumberPadPanel.cpp $(srcdir)/NumberPadPanel.h $(srcdir)/CLFrame.h $(srcdir)/stdafx.h Controller.o: $(srcdir)/Controller.cpp $(srcdir)/Controller.h $(srcdir)/stdafx.h # Include dependency info, if present: -include ./.deps/*.d .PHONY: all install uninstall clean distclean font_bundle
에러 처리
- wxDECLARE_EVENT_TABLE 에러가 발생할 때
- 낮은 버전은 wxWidgets을 사용할 때, 이런 문제가 발생한다.
- http://stackoverflow.com/questions/28210977/error-while-declaration-of-wxdeclare-event-table