有钱:用QTE或 Minigui 吧
没钱:用GNU GTK+
硬件太破: 用microwindow吧
如果想让上层应用开发简单,尽可能的用QTE和MiniGUI等,用GTK+也不错 ,用microwindows 上层需要做的工作太多了
GTK + 与 QT 的不同主要有:
在计算机领域中,要了解图形类软件,首先要弄清楚几个概念:
从本质上讲,MiniGUI 属于一种图形软件。
了解一下计算机系统中图形相关软件的层次关系(参见下图)。
底层图形设备支持软件:
在 Linux 操作系统中,FrameBuffer 驱动程序 就是这类软件。
在 Windows 平台中,针对显示卡的驱动程序 也属于这类软件。
窗口系统(Window System):
窗口系统是用来以窗口形式展示应用程序可显示区域的软件。
如我们熟悉的 Windows 系统。运行在 Windows 系统上的应用程序可以创建单个或者多个窗口,并在窗口中显示应用程序希望显示的内容。而窗口系统就负责管理这些由不同应用程序创建的窗口,确保他们能够协 调显示在共用的计算机屏幕上。 在 Windows 上,窗口系统以一个标准的操作系统组件形式运行。在 Linux/UNIX 系统中,窗口系统以独立于操作系统的应用程序形式运行,通常使用 X Window(X11)系统。 窗口系统用来管理不同应用程序创建的窗口,确保他们可以共存于同一个计算机显示屏幕之上。通常,这些窗口会互相层叠在一起。 但应用程序在向自己的窗口绘制图形、输出图像时,并不需要知道窗口是不是被其他窗口覆盖。这就是窗口系统的主要功能。另外,处理负责管理计算机屏幕之外, 窗口系统还负责管理键盘、鼠标等输入设备。
图形用户界面(Graphics User Interface)程序开发工具包(Toolkit):
在 Windows 系统上,我们一般使用 MFC、Qt 等开发 GUI 应用程序;
在 X Window 上,现在流行使用 Gtk+ 和 Qt 来开发 GUI 程序。
矢量图形(Vector Graphics)支持软件:
Adobe Flash 属于典型的矢量图形软件。
有很多矢量图形的支持库,如 Gtk+ 之上的 Cario、Windows 平台上的 GDI+ 等。目前,OpenVG 是渲染二维矢量图形的工业标准;而 SVG 则是矢量图形的 WWW 标准,可嵌入到网页中。
三维图形(Three dimensions graphics)支持软件: 三维图形支持软件用来实现三维物体的渲染,并最终显示在计算机屏幕上。目前,OpenGL 是用来渲染三维物体 的工业标准。
图形工具类软件: 如 CorelDraw? 这样的图形工具软件,可用来完成矢量图形的绘制、三维物体的建模等等。
大部分人通常会将窗口系统和 GUI Toolkit 混淆在一起。这是因为有些软件仅仅解决特定的需求,而有些软件却同时提供多种功能。比如 Windows 系统,它同时提供操作系统、窗口系统以及图形用户界面 的支持。而在 Linux/UNIX 系统中,X Window 仅仅提供窗口系统 功能,图形用户界面由 Motif、Gtk+、Qt 等提供支持 。MiniGUI 和 Windows 类似,它即是窗口系统,也是一个图形用户界面支持系统 ,并且以组件的方式提供了对矢量图形和三维图形的支持。
因为 MiniGUI 即是窗口系统软件,也是图形用户界面支持系统,所以,MiniGUI 和上面这些软件并不是互斥关系,相反:
autoconf 与 automake 的完整例程
一、 automake 的用途
automake 和 autoconf 可以自动生成 GNU 的 Makefile ,虽然我们也可以 手工写 Makefile ,但是考虑到在多硬件平台上运行,编译环境差异,依赖关系,静态和动态库的生成,等一系列的问题, 对于复杂的代码树,用 automake 工具就成了更好的选择。
在下面的例程中,将介绍树型源码包的 Makefile 生成,其中包括生成库文件和可执行文件。
二、 完整例程
1. 建立目录树
a) 生成目录树
$ mkdir lib
$ mkdir src
$ mkdir include
$ touch include/xy.h
$ touch lib/xy1.cpp
$ touch lib/xy2.cpp
$ touch src/main.cpp
b) 编辑源代码文件
i. include/xy.h 内容如下:
void xytest1();
void xytest2();
ii. lib/xy1.cpp 内容如下:
#include <stdio.h>
void xytest1()
{ printf(“xytest1/n”); }
iii. lib/xy2.cpp 内容如下:
#include <stdio.h>
void xytest2()
{ printf(“xytest2/n”); }
iv. src/main.cpp 内容如下:
#include <xy.h>
main()
{
xytest1();
xytest2();
}
2. autoconf
a) 生成默认的 configure.in
$ autoscan 此时目录下生成 configure.scan
$ mv configure.scan configure.in
b) 编辑 configure.in (为了书写简单,去掉了所有注释)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AM_INIT_AUTOMAKE(xytest, 1.0) # 此 处是软件名和版本号
AC_PROG_CXX # 自 动检测编译器
AC_PROG_CC
AC_PROG_LIBTOOL # 生 成动态/ 静态库需要LIBTOOL
AC_OUTPUT(Makefile lib/Makefile src/Makefile) # 此处是输出的文件
c) 自动生成 configure
$ aclocal 它是一个 perl 脚本,根据 configure.in 产生 aclocal.m4
$ libtoolize –force 它会生成 libtool 所需要的工具,主要为生成库做准备
$ autoconf 通过 aclocal.m4 产生 configure
3. automake
a) Makefile.am 项层写法,编辑 ./Makefile.am 如下
AUTOMAKE_OPTIONS=foreign
SUBDIRS = lib src
b) Makefile.am 编译库文件的写法, 编辑 lib/Makefile.am 如下
DEFAULT_INCLUDES=-I../include
lib_LTLIBRARIES = libxy.la
libxy_la_SOURCES = xy1.cpp xy2.cpp
c) Makefile.am 编译开执行程序的写 法,编辑 src/Makefile.am 如下
DEFAULT_INCLUDES=-I../include
bin_PROGRAMS = main
main_SOURCES = main.cpp
main_LDADD= -L../lib/.libs/ -lxy
d) 生成 Makefile.in
$ automake –add-missing
4. 编译运行(以 arm 为示例)
$ ./configure –host=arm-linux 此时机器上需要有 arm-linux-gcc 系统的编译工具
$ make
$ make install
5. 总结
a) 需要手动编译的只有 configure.in, Makefile.am, 和源代码三处
i. Makefile.am 中的常用设置项
AM_CXXFLAGS= 编译 C++ 程序时所带的 FLAGS
AM_CFLAGS= 编 译C 程序时所带的FLAGS
DEFAULT_INCLUDES= 编 译时加入的include 目录
DEFS= 编 译时定义的DEFIND 值
b) 注意看执行过程中有无错误提示
三、 参考
http://www.ccw.com.cn/htm/app/linux/develop/01_7_25_7.asp
此文档中更加详细地说明了用法和原理,而本文档则更多 的介绍了代码树和库 Makefile 的生成方法
内核移植:
http://blog.chinaunix.net/u3/94284/article_109261.html