转自:“KDE的世界”
作者:千里孤坟
约定:
1、操作系统的基本开发环境需要在此不提及,如libc、win32 API、Carbon(Mac OS的API)等。
2、同一种依赖部件,在重复提及时会简单带过。
3、打有星号*标记的,表示这是KDE 4.0.0相对KDE 3.5新增的依赖软件包。
4、版本要求没有明确指定的,一般应选用最新的稳定分支版本。
5、关于三个依赖级别的含义:
——“必须依赖”表示如果缺乏这些依赖,此组件根本不能通过编译前的cmake预配置(自己DIY CMakeLists.txt的不论)。
——“推荐依赖”表示此依赖会支持相应KDE组件中某些对用户有重要意义的功能,只要用户按自己的意愿安装此组件,一般不会希望错过这类特性,其判断依据不排除少量个人立场。
——“可选依赖”表示此依赖会支持相应KDE组件中某些有用但用户针对性较狭窄,或者意义不大的特性,编译者或包提供者应该选择性地引入。其判断依据不排除少量个人立场。
6、本篇希望对尽量多的读者有用,但并不面向初级用户,所以请不要在这里询问太基本的问题,比如“为什么我执行完cmake会报错误啊?”之类。
7、虽然KDE 4支持Windows、X11、Mac OS三种平台,但本篇因条件所限只能涉及部分X11平台。如果您要在Windows或Mac OS上编译KDE 4,参考价值要打折扣。
基本图形环境
Qt >= 4.3.0:挪威Trolltech公司的一套以开源和商业模式并行运作的产品,C++开发工具箱,KDE的基础,推荐采用4.3系列的最新版本,但不要 4.4系列。在编译Qt时,建议使用gcc 4.0以上编译器,以便启用Visibility执行优化特性(4.0.0~4.0.2不推荐),另外必须启用qt3support模块的支持。
X Window: 目前存在的开源X Window实现主要有XFree86和X.org两个组织,其中X.org分支自XFree86,其进展比较活跃,扩展功能也更多,较新的发行版几乎都 采用这种X Window的实现。KDE 4对这两者都兼容,但在XFree86环境下会缺失一些高级功能。
由于X.org自7.0以后采取了高度模块化的发布方式,可能在部分用户的系统中KDE需要的某些X扩展库未被安装,其中包括但不限于:
XKB:用于处理键盘布局的基本X扩展之一,KDE作为一种国际化的桌面环境借助这一扩展实现对各国家的键盘布局的辨认和交互操作。
X XF86VMode:即libXxf86vm,X中的视频模式扩展,kdegraphics中的kgamma可调用此功能对屏幕显示进行伽玛校正和其它色彩微调操作。
Xau和XDMCP:即libXau和libXdmcp,Xau是X中的验证文件管理库,XDMCP则负责X中的显示管理控制机制(其实一般也可理解作登录管理),可供本机或网络上的用户登录到系统。KDM这一显示管理器要在它们的基础上工作。
Xinerama:即libXinerama,支持双屏幕工作环境必须的组件,kdelibs中会引入。
X Composite:即libXcomposite,X.org 6.8以后才引入的图像混成扩展,XFree86里没有。窗口管理器KWin的部分特效依赖于它的支持,属于养眼性质的东西。
以上仅是部分例子,如果您在构建时仔细阅读cmake输出,可能会了解到更多信息。
如果您使用的是UNIX系统,如Solaris和AIX,且X Window不是XFree86或X.org,在编译时可能遇到一些问题,需要对源码加以部分修改才能通过。随着日后KDE 4逐步走向成熟,对传统UNIX的兼容能力应该会越来越接近KDE 3的程度。
以下kdelibs、kdepimlibs、kdebase三个组件包的构建顺序请按叙述顺序进行,之后的则没有特别规定。
kdelibs
必须依赖
* Strigi >= 0.5.7:桌面搜索引擎。
Zlib:通用的压缩库。
推荐依赖
BZip2:基于块操作的压缩算法,同时提供可执行程序和供二次开发的类库。读写BZip压缩文件需要,一般不会略过。
OpenSSL >= 0.9.6:开源的SSL/TLS工具包,为KDE提供SSL支持。
OpenGL:OpenGL引擎支持,很多图形程序要用到。在不同操作系统上有不同组织或商家提供的OpenGL支持,一般在X Window中默认的是Mesa,当然您可以自行安装显卡芯片原厂提供的驱动。在大多数情况下,nVidia显卡驱动对Linux的支持最佳,ATI的其 次。
PCRE:Perl风格的正则表达式类库,在KJS中提供增强的JavaScript支持。
Aspell:基于命令行的拼写检查工具,适用大多数西方语言。KDE中通过它的接口实现了更灵活方便的图形界面操作。
FAM:文件系统监视变更服务,由于FAM已不再继续开发,一般推荐您使用兼容于FAM的衍生产品Gamin。
libxml2+libxslt:提供了XML文档解析和XSLT转换的支持,重要的基础组件,很多地方依赖它。
libjpeg:JPEG图像格式支持。
giflib:GIF图像格式支持。
libpng:PNG图像格式支持。
以上三种图像格式的解码支持其实在Qt本身中就已实现,如果排除网页浏览器的考虑,在全局环境下对这些图像格式的支持不需要通过kdelibs。但KHTML有对这些类库的额外需要。
JasPer:JPEG 2000图像格式支持。JPEG 2000被业界推为取代JPEG的下一代静态图像标准的格式,目前还未普及。
ALSA >= 1.0.14a:声卡设备驱动的开发接口,提供混音与虚拟设备列表支持。
HAL >= 0.5:硬件抽象层,一般结合FreeBSD 6.2或Linux 2.6.8以上使用(其它一些BSD类系统也有自己的移植),在硬件设备识别和即插即用支持上有重大作用,KDE的相应特性也需要引用它的接口。另外如果 不通过HAL,操作系统也有自己各不相同的即插即用设备解决方案,这里不予详谈。
* Soprano >= 1.99:语义学桌面元数据支持,如果没有,则Nepomuk语义学桌面框架支持也会被略过。SVN获取地址:svn://anonsvn.kde.org/home/kde/trunk/kdesupport/soprano
可选依赖
Kerberos:Kerberos是一种常用于大型网络的身份验证技术,其类库可让KDE提供相应的支持。
Hspell:希伯莱语拼写检查后端。
libacl:这里的ACL是POSIX兼容的文件系统级访问控制列表机制,KDE可以借助它在图形界面操作中实行对它的细处控制。不是每种文件系统都支持它,而且绝大多数发行版默认并不会激活此特性。
OpenEXR:EXR图像格式支持。EXR是一种面向工业领域的高动态范围格式图像,非特定领域的用户很少接触到。
shared-mime-info >= 0.20:用于符合Freedesktop.org统一规范的菜单条目维护。
* Enchant:Abiword项目组的产品,作为一个通用的中间层类库,它可以更多拼写检查后端的支持。
Avahi/mDNSResponder:提供DNS探索服务的底层支持,它可以在局域网中注册应用程序所开放的服务,以便网络内的用户相互访问或共享资源。以上两者功能一致,可任选之一。如果系统中同时检测到两者,则优先采用Avahi。
kdepimlibs
必须依赖
kdelibs
GPGME:GPG的编程API,为GnuPG提供了易用的高级加密接口。
推荐依赖
cycus-sasl:SASL是简单认证安全层的实现,一般用于基于连接的协议认证,如IMAP信箱。在此被kio_imap和kio_sieve所需要。
OpenLDAP:轻量级目录访问协议的实现,kio_ldap所需。
可选依赖
C++ Boost >= 1.31:C++库,它是由标准委员会类库工作组成员所发起的,作为标准库的后备,libsyndication所需。注:在kdenetwork和kdepim(KDE 4.0.0正式版中未完成)中它是必须依赖,如果您不打算忽略那两个组件的话请一开始就将C++ Boost视为必须。
kdebase
注:含kdebase、kdebase-workspace、kdebase-runtime三个部分。在实际构建中,您可以将kdebase- workspace解开后将源码目录改名为workspace,再将kdebase-runtime源码目录改名为runtime后,直接放到 kdebase的源码目录下。cmake预配置时会将它们同时纳入构建对象的,不需分别构建。
必须依赖
kdelibs:不用多说了。
kdepimlibs:不用多说了。
* QImageBlitz >= 0.0.3:一套轻量级的图像特效渲染框架。您也可以在kdesupport代码仓库中得到,很小。SVN获取地址:svn://anonsvn.kde.org/home/kde/trunk/kdesupport/qimageblitz
* Strigi
Zlib
推荐依赖
libusb:USB读写库,用于支持罗技的USB鼠标。
PAM:PAM即可插拔验证模块,在大多数Linux系统中是标配。KDM登录管理器可利用它提供的接口增强验证特性。
Fontconfig:字体配置管理类库。
FreeType >=2.0.0:字体渲染类库,字体安装程序等功能所需。
libsmbclient >= 3.0.14:Samba协议客户端类库,用于支持kio_smb对Windows网络共享的访问。
* libxine >= 1.1.0(1.1.9不可,有关键Bug):在KDE 4的多媒体抽象层Phonon中,libxine被用于构建xine多媒体框架的支持后端。
* libxklavier >= 3.0:用于键盘布局配置的类库,freedesktop.org的产物。没有它其实也不会造成功能缺失,构建体系会改用X内置的xkbfile实现此特 性,但由于这部分代码的维护力度不太好,所以KDE官方推荐使用libxklavier。注意libxklavier还依赖于Glib,当然它也是常用类 库。
OpenGL:供桌面外壳Plasma支持OpenGL功能。
可选依赖
lm-sensors:硬件传感器,KDE系统监视器KSysGuard的可选依赖。
libraw1394:KDE信息中心通过它访问1394设备接口。
* libxcb:即 X C Binding,部分较新的发行版里才会使用,一个以libxcb编译的xine被用于支持phonon-xine后端的视频部件(而且此时要求Xine版本大于1.1.5)。不过目前有些程序会和libxcb冲突,在特定情况下您可能想要忽略这个依赖。
* BlueZ:Linux的蓝牙子系统工具包,用于在KDE中支持对蓝牙设备的界面访问。
* libcaptury:一个实时视频捕捉框架,用于支持窗口管理器KWin中的视频记录特效。
* NetworkManager >= 0.6:用于管理并配置网络连接的服务,为台式机和笔记本设计,注意如果您的系统使用固定IP,尤其是服务器,不需要它。它在KDE 4中是solid硬件编程接口的网络后端之一。
由此向下,针对kdelibs和kdebase的依赖都不再赘述。
kdenetwork
必须依赖
kdepimlibs
C++ Boost
推荐依赖
* libvncserver >= 0.9.1:VNC服务器端类库,用于构建远程桌面工具Krfb和Krdc的VNC支持。
* QCA2:QCA即Qt密钥架构(Qt Cryptographic Architecture),QCA2专为Qt4设计,以Qt4的插件形式存在。Kopete的GroupWise和Jabber协议编译必须。
libidn:GNU的国际化域名规范(IDN)的实现类库。Kopete的Jabber插件编译必须。
libjpeg
libxml2+libxslt
OpenSSL
Zlib
可选依赖
OpenSLP:服务定位协议SLP(Service Location Protocol)类库,可供远程桌面程序能自动探索本地网络内开放的服务。
rdesktop:Windows的RDP远程桌面服务器客户端,Krdc在连接RDP服务器时需要调用此程序。它不是一个编译依赖,没有它Krdc也提供此功能的选项,只是不能工作。
* Decibel:实时移动通讯的功能框架,可实现和移动电话的即时通信。Kopete的Telepathy协议编译必须。
* Sqlite:一种轻量级的SQL引擎,采用文件数据库的存储形式。供Kopete的联系人状态统计插件使用。
mDNSResponder:用于编译Zeroconf服务探索协议的KIO管道。
kdegraphics
必须依赖
* Strigi
Zlib
推荐依赖
Gphoto2:用于引入数码相机支持。
libsane:SANE=Scanner Access Now Easy,用于引入扫描仪支持。
libTIFF:Okular通过它实现对TIFF文档格式的支持,TIFF一般用于传真数据的图像形式储存,支持多页,所以某种意义上用文档格式来描述也不为过。
* Exiv2 >= 0.12:编译图像浏览器Gwenview必须,用于读写图像文件内嵌入的Exiv信息。
* Poppler-Qt4:Poppler是freedesktop.org项目组的公用PDF渲染类库,Poppler-Qt4则是基本libpoppler的Qt4风格封装。Okular通过它实现对PDF文档格式的支持。
* libgs:Okular通过它实现对gs(Ghostscript)文档格式的支持,这也是一种通用的打印机语言。
* chmlib:Okular通过它实现对CHM文档格式的支持,CHM格式常见于Windows软件的帮助文档和电子书。
* QImageBlitz:编译KolourPaint4、Okular必须。
FreeType
可选依赖
* libdjvulibre >= 3.5.17:Djvu是一种学术界常见的电子文档格式,Okular通过它实现对Djvu文档格式的支持。
libjpeg:Okular通过它实现对PalmDB文档格式的支持。
kdegames
可选依赖
* ggz-client-libs:GGZ 是GGZ Game Zone的递归缩写,它是一种开放式的网络“游戏大厅”框架。在这里可供KDE游戏将自身注册到GGZ网络,以便他人能和您在线玩游戏。目前还只有 kbattleship等个别游戏在程序层面支持此特性,不过libkdegames类库中已经有较通用的封装了。
kdeutils
必须依赖
QImageBlitz
推荐依赖
GMP:一套用于快速的高精度运算的算术库。KCalc计算器程序必须。
* libzip:Zip压缩格式的操作类库封装,归档管理器Ark现在需要通过它实现对Zip的支持。
可选依赖
Tpctl:在klaptopdaemon笔记本增强体验程序中借助它实现对ThinkPad系列产品的支持。
kdeedu
推荐依赖
OpenGL
Zlib
可选依赖
Python Boost >= 1.31:也是C++ Boost项目组的产物,它是Boost对Python开发规范的库封装。在此用于支持几何程序Kig的Python脚本集成特性。
libusb:在KStars中有些天文仪器是通过USB设备连接的,需要libusb来操作。
OCaml:一种面向对象的Caml语言,Kalzium用它实现化学方程配平器的算法。
libfacile:一个OCaml的模块,提供带整型约束特性的函数集。Kalzium要配合它和OCaml来完成需要的算法。
* libcfitsio >= 3.03:一套用于读写FITS数据文件的类库,FITS是国际天文台学会颁布的世界各天文台之间用于数据传输、交换的统一标准格式。由桌面天文馆KStars程序引用。
* OpenBabel >= 2.1:Kalzium所需的一个分子转换和模式匹配类库。
* Eigen >= 1.0.5:一套轻量级的矢量和矩阵数学(线性代数就是其中的一个领域)模板库,由一组C++头文件组成。Kalzium的3D分子查看器需要。
* libnova >= 0.12.1:一个应用于天体力学、天体动力学和天体测量学的函数类库,KStars的部分计算功能通过它实现。
* libsbigudrv >= 1.00:通用SBIG设备驱动类库,如果希望KStars支持INDI(一种天文仪器上使用的控制协议)天文望远镜外设则需要它。
* Readline:Readline是一套用于命令行编辑的增强功能函数库,KDE 4新增的函数绘图程序KAlgebra的控制台界面需要它。
kdeadmin
必须依赖
kdepimlibs
Zlib
kdemultimedia
必须依赖
Zlib
推荐依赖
Taglib >= 1.4:音频元数据读写库,兼容多种主流音频编码格式。编译音乐管理器Juk必须。
libvorbis:Vorbis是一种无专利的有损音频编解码技术,在KDE 4中用于以Vorbis格式抓取CD音轨和相应的元数据识别。
libogg:Ogg是一种无专利的多媒体容器格式,一般包含Vorbis和Theora格式的媒体数据。KDE 4中用于相应的元数据识别。
libFLAC:FLAC是一种无专利的无损音频编解码技术,在KDE 4中用于以Vorbis格式抓取CD音轨和相应的元数据识别。
cdparanoia:一个CD音轨抓取程序,kio_audiocd调用它在图形界面上层次上完成相应功能。
ALSA
可选依赖
libtheora:Theora是一种无专利的视频编解码技术,但并不活跃和常见。KDE 4中用于相应的元数据识别。
libmusicbrainz >= 3.0:MusicBrainZ是一种网络社区维系的音乐元数据中心,Juk可结合libmusicbrainz和下面的libtunepimp实现音乐文件的标签自动填充。
libtunepimp >= 0.4:它是MusicBrainZ和应用程序之间的连接引擎,和前者同时被依赖。注意libtunepimp 0.5.x和0.4.x版本不兼容,虽然Juk都可以支持,但较新的版本会引入其它外部依赖。
kdetoys
可选依赖
* Strigi
kdeaccessibility
必须依赖
Zlib
推荐依赖
Festival:Festival是一种TTS引擎,本身虽无GUI但已经具备了一个强大的TTS转换与朗读器的应有特性,对多种读音的易扩展支援架构是其通用性和可持续发展的重要保障。它是KTTSD推荐的TTS混成器插件的必要支援。
ALSA
可选依赖
Epos:Epos被致力设计成一个具有语言无关性的TTS引擎,以后台守护进程方式运作。KTTSD所支持的混成器插件之一。
Flite:Festival Lite也是一个TTS引擎,虽然名字中有Festival字样,但已不依赖Festival本身。flite有很深厚的教育机构背景,它是英国爱丁堡大 学和美国卡内基梅隆大学合作研究的FestVox项目中的一部分。flite在这里也可作为一个KTTSD混成器插件被调用。
FreeTTS:FreeTTS 是一个用JAVA语言编写的TTS引擎,其技术基于Flite,缺少它相应的KTTSD混成器插件不可用。在所有第三方 TTS引擎中,它也许不是最好的,但安装却是最简单的,将一个jar压缩包存放在任意路径,在kcmkttsd中指定路径即可。当然,不必说,运行这个插 件肯定会要借助Java Runtime环境。
mbrola:另外一个可选的KTTSD混成器插件Hadifix的必要后台支援程序,它主要面向德语用户。
注:以上所有KTTSD插件的依赖都是运行时依赖,无论这些外件本身有没有都不影响相应插件的编译。
kdesdk
必须依赖
* Strigi
推荐依赖
libxml2+libxslt:编译UML建模工具Umbrello必须。
subversion:新兴的客户端/服务器模式的并行版本控制系统,这里需要其客户端类库来编译kio_svn,它提供一个网络透明的SVN资源库访问途径,服务器端组件非必需。
可选依赖
libltdl:GNU Libtool动态模块加载类库,libtool工具包的一部分。编译kstartpref这个测试KDE程序启动时间的小工具所需。在KDE3中它默认不会被纳入构建目标。
kdewebdev
必须依赖
libxml2+libxslt
推荐依赖
* libtidy:用于检查HTML语法的工具库。目前主要由链接检查器klinkstatus调用。
kdebindings
推荐依赖
Python:一种面向对象的解释执行型语言,相当流行。编译Kross Python(Kross是KDE 4中的脚本框架,源于KOffice 1.6)和PyKDE4所需。
SIP >= 4.7.1 + PyQt >= 4.3.1:SIP是一个可以自动为Python绑定创建C或C++所需代码的工具,PyKDE4编译所需。
Ruby >= 1.8.2:一种面向对象的解释执行型语言。构建QtRuby、Korundum(Ruby对KDE的绑定)、Kross Ruby所需。
OpenGL
可选依赖
QScintilla2:Scintilla是 一种广受好评的源码编辑器框架,QScintilla2是它的Qt4移植版,在Qt4中作为一套增补的类库形式存在。Qyoto和SMOKE(脚本元对象 编译引擎,Scripting Meta Object Kompiler Engine)可以在编译时引入对这个模块的支持,这实质也间接作用于QtRuby。
* Mono:Mono是一个旨在非Windows平台上的实现.NET开发的项目,目前在技术层面已经取得了较好的成绩,但还缺少第三方软件赞助商的支持。它是构建Qyoto这个Qt#绑定所需。