wxWidget作为知名的跨平台界面开发框架,已经有相当长的历史了,最近利用业余时间研究了wxWidget框架在Ubuntu下的开发方法,其中搭建开发环境走了一些弯路,参考了网上不少好文,总算尘埃落定,不敢独享,把搭建步骤记录于此,希望给有同样研究兴趣的同学一个参考。
那么现在开始...
开始之前需要安装:
C++ 基本开发环境:sudo apt-get install build-essential
安装X11库文件:sudo apt-get install libx11-dev
安装GTK需要的一堆东西:sudo apt-get install gnome-core-devel
安装minGW32,windows交叉编译工具:sudo aptitude install -y mingw32 mingw32-binutils mingw32-runtime gcc-mingw32
说明:因为我搭建的环境预备用来编译gtk,x11和msw(MS Windows)三个平台的代码,所以需要先安装这三种平台的交叉编译工具,如果还要编译其他平台的程序,就还得安装其他平台的编译工具。
以下为配置步骤:
1. 从wxWidget官方网站下载源代码包wxAll版本,次级版本号为双数的是稳定版本(目前是2.8.12),单数是最新开发版(2.9.4),一般而言不够稳定,我们下载稳定版:
wxWidgets-2.8.12.tar.gz( http://www.wxwidgets.org/downloads/ )
解压到/home/youxin/code/wxWidgets-2.8.12,作为程序根目录:
tar -xzvf wxWidgets-2.8.12.tar.gz
2.在程序根目录wxWidgets-2.8.12下,建立各平台文件夹,目前建立了一下三个:
build28-gtk-ud //存放gtk平台文件
build28-x11-ud //存放x11平台文件
build28-msw-ud //存放MS Windows平台文件
自己定的目录命名规则,u代表开启unicode,d代表开启debug, s代表开启shared lib, 没有这些字母表示不开启 如果后续要建立gtk平台unicode, release版本,连接动态库的编译环境,则目录名为build28-gtk-urs
一下三步参考《Cross-Platform GUI Programming with wxWidgets EN.chm》Appendix A:installing wxWidgets--Linux,Unix, and Mac OS X, GCC
3.编译和配置gtk环境:
cd build28-gtk-ud
sudo ../configure --with-gtk --enable-unicode --enable-debug --disable-shared //该步骤在当前目录下生成平台的各种文件
//上一指令隐含参数--build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
sudo make //编译平台库文件
sudo make install //将库文件安装到/usr/local/lib,其他用户可以共享使用;将当前配置wx-config拷贝到usr/local/bin,作为默认编译配置
sudo ldconfig //更新、注册新添加的动态库
4.编译和配置x11环境:
cd build28-x11-ud
sudo ../configure --with-x11 --enable-unicode --enable-debug --disable-shared
//上一指令隐含参数--build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
sudo make
sudo make install
sudo ldconfig
5.编译和配置msw环境:
cd build28-msw-ud
sudo ../configure --with-msw --host=i586-mingw32msvc --build=i686-linux --enable-unicode --enable-debug --disable-shared
//上一指令隐含参数--target=i586-mingw32msvc
sudo make
sudo make install
sudo ldconfig
以上三个步骤执行完后,每个build目录都会生成samples文件夹,里面会为每个平台生成对应的例子编译makefile文件,直接在例子的目录中执行make,可以编译出例子。
6.在任意程序目录使用默认配置编译代码,以simple.cpp为例,使用命令:
g++ -o simple simple.cpp `wx-config --cxxflags --libs`
命令中`符号不是单引号,是ESC键下面的符号。该符号括住的命令会被命令行执行,返回值作为命令行参数。
wx-config命令返回默认的编译参数和引用库路径(--cxx参数返回编译器名,--cxflags返回编译参数,--libs返回编译依赖的库文件和库目录),wx-config存在于/usr/local/bin,由最近一次在目录build28-gtk-ud, build28-x11-ud或build28-msw-ud中执行sudo make install创建,因此编译配置由最后一次make install所在目录决定。
如果不希望用默认配置编译(希望手工选择编译目标平台),可以用一下命令:
gtk平台:g++ -o simple_gtk simple.cpp `~/code/wxWidgets-2.8.12/build28-gtk-ud/wx-config --libs --cxxflags`
x11平台:g++ -o simple_x11 simple.cpp `~/code/wxWidgets-2.8.12/build28-x11-ud/wx-config --libs --cxxflags`
msw平台:i586-mingw32msvc-g++ -o simple_msw simple.cpp `~/code/wxWidgets-2.8.12/build28-msw-ud/wx-config --libs --cxxflags`
注意:在目录build28-gtk-ud, build28-x11-ud或build28-msw-ud中,命令行直接输入执行:
wx-config --libs
实际执行的是/usr/local/bin中的版本,如果要执行目录中特定平台的版本,需要显示指定:
~/code/wxWidgets-2.8.12/build28-gtk-ud/wx-config --libs
附上configure脚本基本调用模式:
在建立的平台文件夹中输入:
../configure --enable-unicode --disable-debug --disable-shared
一般对unicode,debug,shared三个选项进行enable和disable设置。
configure参数:
`configure' configures wxWidgets 2.8.12 to adapt to many kinds of systems.
Usage:
./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, `make install' will install all the files in `/usr/local/bin', `/usr/local/lib' etc. You can specify an installation prefix other than `/usr/local' using `--prefix', for instance `--prefix=$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data [PREFIX/share]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--infodir=DIR info documentation [PREFIX/info]
--mandir=DIR man documentation [PREFIX/man]
X features:
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
--target=TARGET configure for building compilers for TARGET [HOST]
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-gui use GUI classes
--enable-monolithic build wxWidgets as single library
--enable-plugins build parts of wxWidgets as loadable components
--enable-universal use wxWidgets GUI controls instead of native ones
--enable-nanox use NanoX
--disable-gtk2 use GTK+ 1.2 instead of 2.0
--enable-gpe use GNOME PDA Environment features if possible
--enable-shared create shared library code
--enable-optimise compile without optimisations
--enable-debug same as debug_flag and debug_info
--enable-stl use STL for containers
--enable-omf use OMF object format
--enable-debug_flag set __WXDEBUG__ flag (recommended for developers!)
--enable-debug_info create code with debugging information
--enable-debug_gdb create code with extra GDB debugging information
--enable-debug_cntxt use wxDebugContext
--enable-mem_tracing create code with memory tracing
--enable-profile create code with profiling information
--enable-no_rtti create code without RTTI information
--enable-no_exceptions create code without C++ exceptions handling
--enable-permissive compile code disregarding strict ANSI
--enable-no_deps create code without dependency information
--disable-vararg_macros don't use vararg macros, even if they are supported
--enable-universal_binary create Mac PowerPC and Intel Universal binary
--enable-compat24 enable wxWidgets 2.4 compatibility
--disable-compat26 disable wxWidgets 2.6 compatibility
--disable-rpath disable use of rpath for uninstalled builds
--enable-objc_uniquifying enable Objective-C class name uniquifying
--enable-abi-incompatible-features Enables features that break ABI compatibility
--enable-intl use internationalization system
--enable-config use wxConfig (and derived) classes
--enable-protocols use wxProtocol and derived classes
--enable-ftp use wxFTP (requires wxProtocol
--enable-http use wxHTTP (requires wxProtocol
--enable-fileproto use wxFileProto class (requires wxProtocol
--enable-sockets use socket/network classes
--enable-ole use OLE classes (Win32 only)
--enable-dataobj use data object classes
--enable-ipc use interprocess communication (wxSocket etc.)
--enable-apple_ieee use the Apple IEEE codec
--enable-arcstream use wxArchive streams
--enable-backtrace use wxStackWalker class for getting backtraces
--enable-catch_segvs catch signals in wxApp::OnFatalException (Unix only)
--enable-cmdline use wxCmdLineParser class
--enable-datetime use wxDateTime class
--enable-debugreport use wxDebugReport class
--enable-dialupman use dialup network classes
--enable-dynlib use wxLibrary class for DLL loading
--enable-dynamicloader use (new) wxDynamicLibrary class
--enable-exceptions build exception-safe library
--enable-ffile use wxFFile class
--enable-file use wxFile class
--enable-filesystem use virtual file systems classes
--enable-fontmap use font encodings conversion classes
--enable-fs_archive use virtual archive filesystems
--enable-fs_inet use virtual HTTP/FTP filesystems
--enable-fs_zip now replaced by fs_archive
--enable-geometry use geometry class
--enable-log use logging system
--enable-longlong use wxLongLong class
--enable-mimetype use wxMimeTypesManager
--enable-mslu use MS Layer for Unicode on Windows 9x (Win32 only)
--enable-snglinst use wxSingleInstanceChecker class
--enable-std_iostreams use standard C++ stream classes
--enable-std_string use standard C++ string classes
--enable-stdpaths use wxStandardPaths class
--enable-stopwatch use wxStopWatch class
--enable-streams use wxStream etc classes
--enable-sysoptions use wxSystemOptions
--enable-tarstream use wxTar streams
--enable-textbuf use wxTextBuffer class
--enable-textfile use wxTextFile class
--enable-timer use wxTimer class
--enable-unicode compile wxString with Unicode support
--enable-sound use wxSound class
--enable-mediactrl use wxMediaCtrl class
--enable-gstreamer8 force GStreamer 0.8 instead of 0.10 with the wxMediaCtrl class on unix
--enable-printfposparam use wxVsnprintf() which supports positional parameters
--enable-zipstream use wxZip streams
--enable-url use wxURL class
--enable-variant use wxVariant class
--enable-protocol use wxProtocol class
--enable-protocol-http HTTP support in wxProtocol
--enable-protocol-ftp FTP support in wxProtocol
--enable-protocol-file FILE support in wxProtocol
--enable-threads use threads
--enable-docview use document view architecture
--enable-help use help subsystem
--enable-mshtmlhelp use MS HTML Help (win32)
--enable-html use wxHTML sub-library
--enable-htmlhelp use wxHTML-based help
--enable-xrc use XRC resources sub-library
--enable-aui use AUI docking library
--enable-constraints use layout-constraints system
--enable-printarch use printing architecture
--enable-mdi use multiple document interface architecture
--enable-mdidoc use docview architecture with MDI
--enable-loggui use standard GUI logger
--enable-logwin use wxLogWindow
--enable-logdialog use wxLogDialog
--enable-webkit use wxWebKitCtrl (Mac)
--enable-richtext use wxRichTextCtrl
--enable-graphics_ctx use graphics context 2D drawing API
--enable-postscript use wxPostscriptDC device context (default for gtk+)
--enable-prologio not available; see contrib
--enable-resources not available; see contrib
--enable-clipboard use wxClipboard class
--enable-dnd use Drag'n'Drop classes
--enable-metafile use win32 metafiles
--enable-controls use all usual controls
--enable-accel use accelerators
--enable-animatectrl use wxAnimationCtrl class
--enable-button use wxButton class
--enable-bmpbutton use wxBitmapButton class
--enable-bmpcombobox use wxBitmapComboBox class
--enable-calendar use wxCalendarCtrl class
--enable-caret use wxCaret class
--enable-checkbox use wxCheckBox class
--enable-checklst use wxCheckListBox (listbox with checkboxes) class
--enable-choice use wxChoice class
--enable-choicebook use wxChoicebook class
--enable-collpane use wxCollapsiblePane class
--enable-colourpicker use wxColourPickerCtrl class
--enable-combobox use wxComboBox class
--enable-comboctrl use wxComboCtrl class
--enable-datepick use wxDatePickerCtrl class
--enable-dirpicker use wxDirPickerCtrl class
--enable-display use wxDisplay class
--enable-detect_sm use code to detect X11 session manager
--enable-filepicker use wxFilePickerCtrl class
--enable-fontpicker use wxFontPickerCtrl class
--enable-gauge use wxGauge class
--enable-grid use wxGrid class
--enable-dataviewctrl use wxDataViewCtrl class
--enable-hyperlink use wxHyperlinkCtrl class
--enable-imaglist use wxImageList class
--enable-listbook use wxListbook class
--enable-listbox use wxListBox class
--enable-listctrl use wxListCtrl class
--enable-notebook use wxNotebook class
--enable-odcombobox use wxOwnerDrawnComboBox class
--enable-radiobox use wxRadioBox class
--enable-radiobtn use wxRadioButton class
--enable-sash use wxSashWindow class
--enable-scrollbar use wxScrollBar class and scrollable windows
--enable-searchctrl use wxSearchCtrl class
--enable-slider use wxSlider class
--enable-spinbtn use wxSpinButton class
--enable-spinctrl use wxSpinCtrl class
--enable-splitter use wxSplitterWindow class
--enable-statbmp use wxStaticBitmap class
--enable-statbox use wxStaticBox class
--enable-statline use wxStaticLine class
--enable-stattext use wxStaticText class
--enable-statusbar use wxStatusBar class
--enable-tabdialog use wxTabControl class
--enable-textctrl use wxTextCtrl class
--enable-togglebtn use wxToggleButton class
--enable-toolbar use wxToolBar class
--enable-tbarnative use native wxToolBar class
--enable-treebook use wxTreebook class
--enable-toolbook use wxToolbook class
--enable-treectrl use wxTreeCtrl class
--enable-tipwindow use wxTipWindow class
--enable-popupwin use wxPopUpWindow class
--enable-commondlg use all common dialogs
--enable-aboutdlg use wxAboutBox
--enable-choicedlg use wxChoiceDialog
--enable-coldlg use wxColourDialog
--enable-filedlg use wxFileDialog
--enable-finddlg use wxFindReplaceDialog
--enable-fontdlg use wxFontDialog
--enable-dirdlg use wxDirDialog
--enable-msgdlg use wxMessageDialog
--enable-numberdlg use wxNumberEntryDialog
--enable-splash use wxSplashScreen
--enable-textdlg use wxTextDialog
--enable-tipdlg use startup tips
--enable-progressdlg use wxProgressDialog
--enable-wizarddlg use wxWizard
--enable-menus use wxMenu/wxMenuBar/wxMenuItem classes
--enable-miniframe use wxMiniFrame class
--enable-tooltips use wxToolTip class
--enable-splines use spline drawing code
--enable-mousewheel use mousewheel
--enable-validators use wxValidator and derived classes
--enable-busyinfo use wxBusyInfo
--enable-joystick use wxJoystick
--enable-metafiles use wxMetaFile (Win32 only)
--enable-dragimage use wxDragImage
--enable-accessibility enable accessibility support
--enable-dccache cache temporary wxDC objects (Win32 only)
--enable-palette use wxPalette class
--enable-image use wxImage class
--enable-gif use gif images (GIF file format)
--enable-pcx use pcx images (PCX file format)
--enable-tga use tga images (TGA file format)
--enable-iff use iff images (IFF file format)
--enable-pnm use pnm images (PNM file format)
--enable-xpm use xpm images (XPM file format)
--enable-icocur use Windows ICO and CUR formats
--enable-official_build official build of wxWidgets (win32 DLL only)
--enable-vendor=VENDOR vendor name (win32 DLL only)
--disable-largefile omit support for large files
--disable-gtktest do not try to compile and run a test GTK+ program
--disable-gtktest Do not try to compile and run a test GTK program
--disable-sdltest Do not try to compile and run a test SDL program
--enable-omf use OMF object format (OS/2)
--disable-dependency-tracking don't use dependency tracking even if the compiler can
--disable-precomp-headers don't use precompiled headers even if compiler can
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--without-subdirs don't generate makefiles for samples/demos/...
--with-gtk[=VERSION] use GTK+, VERSION can be 2 (default), 1 or "any"
--with-motif use Motif/Lesstif
--with-mac use Mac OS X
--with-cocoa use Cocoa
--with-wine use Wine
--with-msw use MS-Windows
--with-pm use OS/2 Presentation Manager
--with-mgl use SciTech MGL
--with-directfb use DirectFB
--with-microwin use MicroWindows
--with-x11 use X11
--with-libpng use libpng (PNG image format)
--with-libjpeg use libjpeg (JPEG file format)
--with-libtiff use libtiff (TIFF file format)
--with-libxpm use libxpm (XPM file format)
--with-libmspack use libmspack (CHM help files loading)
--with-sdl use SDL for audio on Unix
--with-gnomeprint use GNOME print for printing under GNOME
--with-gnomevfs use GNOME VFS for associating MIME types
--with-hildon use Hildon framework for Nokia 770
--with-opengl use OpenGL (or Mesa)
--with-themes=all|list use only the specified comma-separated list of wxUniversal themes
--with-dmalloc use dmalloc library (http://dmalloc.com/)
--with-regex enable support for wxRegEx class
--with-zlib use zlib for LZW compression
--with-odbc use the IODBC and wxODBC classes
--with-expat enable XML support using expat parser
--with-macosx-sdk=PATH use an OS X SDK at PATH
--with-macosx-version-min=VER build binaries which require at least this OS X version
--with-flavour=NAME specify a name to identify this build
--with-gtk-prefix=PFX Prefix where GTK is installed (optional)
--with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)
--with-x use the X Window System
--with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib
--with-sdl-prefix=PFX Prefix where SDL is installed (optional)
--with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)
--with-cppunit-prefix=PFX Prefix where CppUnit is installed (optional)
--with-cppunit-exec-prefix=PFX Exec prefix where CppUnit is installed (optional)
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
headers in a nonstandard directory <include dir>
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
PKG_CONFIG path to pkg-config utility
DIRECTFB_CFLAGS C compiler flags for DIRECTFB, overriding pkg-config
DIRECTFB_LIBS linker flags for DIRECTFB, overriding pkg-config
PANGOX_CFLAGS C compiler flags for PANGOX, overriding pkg-config
PANGOX_LIBS linker flags for PANGOX, overriding pkg-config
PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config
PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config
PANGOXFT_CFLAGS C compiler flags for PANGOXFT, overriding pkg-config
PANGOXFT_LIBS linker flags for PANGOXFT, overriding pkg-config
LIBGNOMEPRINTUI_CFLAGS C compiler flags for LIBGNOMEPRINTUI, overriding pkg-config
LIBGNOMEPRINTUI_LIBS linker flags for LIBGNOMEPRINTUI, overriding pkg-config
GNOMEVFS_CFLAGS C compiler flags for GNOMEVFS, overriding pkg-config
GNOMEVFS_LIBS linker flags for GNOMEVFS, overriding pkg-config
HILDON_CFLAGS C compiler flags for HILDON, overriding pkg-config
HILDON_LIBS linker flags for HILDON, overriding pkg-config
CAIRO_CFLAGS C compiler flags for CAIRO, overriding pkg-config
CAIRO_LIBS linker flags for CAIRO, overriding pkg-config
GST_CFLAGS C compiler flags for GST, overriding pkg-config
GST_LIBS linker flags for GST, overriding pkg-config
Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations.
Report bugs to <wx-dev@lists.wxwidgets.org>.