Jump to content

Archive:Getting Started/Build/KDE4 (zh CN)

From KDE TechBase

Template:I18n/Getting Started/Build/KDE4

从源代码构建KDE4
Tutorial Series   开始
Previous   [[../../Sources/Anonymous_SVN|Anonymous SVN Quickstart Guide]]
What's Next   [[../../Set_up_KDE_4_for_development|Starting a KDE4 Environment and Applications]]
Further Reading   kdesvn-build: The KDE From Subversion Build Tool
[[../../Increased_Productivity_in_KDE4_with_Scripts|Increased Productivity in KDE4 with Scripts]]
CMake介绍
[[../KDE4/FreeBSD|FreeBSD notes]]
[[../KDE4/Mac OS X|Instructions for Mac OS X]]

摘要

这份教程介绍了一种使KDE运行于Linux/BSD系统的方法。这份教程通篇使用了bash shell。如果你对在其他系统(如:Solaris、MacOS或Microsoft Windows)上构建KDE有兴趣, 请访问[[../|构建]]页面 并在最下方的链接处选择相应的操作系统。

Note
当周一提交了重大的修改时,构建错误的风险会很大。可以通过Dashboard报告意料之外的破坏。非常欢迎大家修复失败的模块。


所需软件

首先你必须安装以下软件,你才能成功完成这份教程:

  • 来自gcc项目的gcc和g++, 最好是4.1或更高的版本。
  • svn(Subversion客户端)
  • pkg-config
  • X11和OpenGL的开发库及头文件
  • libjpeg、libpng、libungif、libxml2和libxslt的开发库及头文件
  • makeobj脚本。可以做为kdesdk-scripts(debian)或类似的软件包的部件来安装,或者直接从WebSVN下载该软件本身。
  • shared-mime-info软件包,是KDE现在使用的freedesktop MIME标准。

你也许还需要安装以下软件:

  • bash

为KDE4开发创建一个用户账户

Note
一些人喜欢为KDE 4使用一个单独的用户帐户(例如一个旧的bug可能因为错误很删除了一些文件),并且后面的这些指令都是使用这种方式进行的。

使用一个单独的用户帐户做任何事情都是很有效率的,有关细节请参考Increased Productivity in KDE4 with Scripts

你还可以遵循下面的指令,但并不把这些环境变量保存到你的.bashrc中,请把他们放到一个单独的文件中,以备你在切换到KDE 4环境中使用。


选项1:命令行

useradd -m kde-devel 或者: useradd kde-devel mkdir /home/kde-devel passwd kde-devel chown kde-devel:kde-devel /home/kde-devel 2>/dev/null || \ chown kde-devel:users /home/kde-devel

选项2:使用KControl

如果你已经安装了KDE3,你可以使用KDE控制中心里的用户模块来替代上述的命令以添加用户。

设置环境

从你的普通账户下拷贝~/.bashrc到新的kde-devel账户下。然后,把.bashrc示例的内容复制并且粘贴到~kde-devel/.bashrc。如果你不能使用makeobj命令,请把例子中的alias make=makeobj这一行注释掉,这一行命令来自于KDE SDK脚本。

这样就可以访问本教程中所使用的如cmakekde这类命令,同时保证了Qt、KDE、CMake文件的正确的路径。

更多的信息,请阅读Getting Started/Increased Productivity in KDE4 with Scripts

切换到新用户

切换到用户kde-devel:(不要忘了输入横线) su - kde-devel

在以下教程中将假定你使用kde-devel用户。

开发用户的shell

有些系统上,新用户被默认配置使用/bin/sh。如果你得系统不是这样,请跳过这一节。使用/bin/sh非常的不方便,你可能希望转换到/bin/bash或其他的shell。

选项1:作为kde-devel用户

如果你没有root特权,同时你的系统支持使用chsh程序来转换你自己的shell,那你可以尝试使用这条命令来把你的shell转换到/bin/bash chsh -s /bin/bash kde-devel

选项2:作为root用户

如果你得系统带有usermod程序,你可以以root身份运行以下命令:usermod -s /bin/bash。另一个选择是以root身份使用vipw程序安全的编辑你的/etc/passwd。在文件中找到“kde-devel”,将行尾的“/bin/sh”改为“/bin/bash”。保存你的修改并退出。

新的shell将在你再次使用kde-devel用户登录时自动启动。

D-Bus

QtDBus和KDE使用D-Bus版本为0.62、0.92或更高的版本。0.60和0.61版也可能工作但未经测试。0.90和0.91版不能工作。我们建议使用1.0版(最低0.94),所以如果你还没有该版本,请考虑升级。

你可以跳过这一节如果你已经使用了最新的D-Bus版本或者你不想升级。

在运行秘诀中的步骤之前,请确认你有X11的头文件和库文件。配置脚本的第五行应该输出:

Building X11 code:        yes

秘诀

Tip
请确认你的环境已按照上面叙述正确配置。这对cscb函数的正确运行是必须的。


cs wget http://dbus.freedesktop.org/releases/dbus/dbus-1.0.2.tar.gz tar -xvzf dbus-1.0.2.tar.gz cd dbus-1.0.2/ ./configure --prefix=$DBUSDIR --localstatedir=$KDEDIR/var make make install dbus-uuidgen --ensure

发生了什么

在切换到源码目录后(第1行),从freedesktop.org下载了D-Bus的源代码(第2行)并解压缩(第3行)。在进入新创建的D-Bus目录后(第4行),通过提供的configure脚本准备构建(第5行)。在完成D-Bus的构建(第5行)和安装(第7行)后,使用dbus-uuidgen工具来安装机器识别文件,该文件使得bus在桌面启动时自动运行(第8行)。

注意,最后两步,你需要有对/var的写入权限,如果你的系统不支持sudo,你可以使用su命令代替。例如:su -c "make install"

CMake

如果你的CMake>=2.4.5,那请跳过这一节。你可以直接使用CMake网站提供的二进制包。这里有针对一些发行版特定的软件包。针对openSUSE的CMake二进制包通过openSUSE构建服务提供。

秘诀

cs wget http://www.cmake.org/files/v2.4/cmake-2.4.6.tar.gz tar zxf cmake-2.4.6.tar.gz mkdir cmake-build cd cmake-build ../cmake-2.4.6/bootstrap make sudo make install

发生了什么

首先,我们回到kde-devel用户的源码目录(第1行),获取CMake的源码(第2行)并解压(第3行)。然后创建一个CMake的构建目录(第4行)并进入该目录(第5行)。通过运行CMake的boostrap脚本来准备Cmake的构建(第6行),然后以root身份make(第7行)安装(第8行)CMake。

如果你的系统没有sudo命令,你可以使用su -c "make install"命令代替。

Qt

下一步,我们需要从KDE的代码仓库获得Qt4。KDE保证可以依赖任何版本的Qt 4.3来构建。Qt 4.2和之前的版本不被支持并且将不能工作。这是一个未发行的版本,因此你的发行版不一定有打包好的软件包。你应该使用KDE Subversion服务器提供的拷贝。

秘诀

cd svn checkout svn://anonsvn.kde.org/home/kde/trunk/qt-copy cd qt-copy ./apply_patches ./configure -qt-gif -no-exceptions -debug -fast \

-prefix $QTDIR -qdbus -pch -nomake examples \
-nomake demos

make sub-src sub-tools

  1. make install: only if QTDIR is not the current directory!

make install

发生了什么

我们切换回kde-devel用户的主目录(第1行),然后使用subversion(svn)从KDE的代码仓库下载源代码(第2行)。在切换进入qt-copy目录后(第3行),我们运行qt-copy下脚本来管理补丁(第4行)。

当这些补丁被应用后,我们使用configure脚本准备构建环境(第5-7行)。这里使用的这几行命令和选项在qt-copy/README.qt-copy文件里有解释。最后,我们构建KDE所需的最少需求(第8行)并安装Qt(第9-10行)。如果想要全部的例子和demo应用,你可以单独构建他们或直接在qt-copy目录下运行make

注意这次安装并不需要root,因为它把Qt安装到了本地的$QTDIR。所以,这次安装只需要$QTDIR$HOME/qt-copy不同即可,如果你已经遵循这些指令执行了,就不会出现这种情况。

疑难解答

如果你得到了“error: X11/Xlib.h: No such file or directory”,请安装xorg(实际的名称可能根据操作系统的不同而改变,例如在基于Ubuntu的系统Kubuntu上,这个包叫xorg-dev)的开发包。

如果你在configure时获得缺失定义的错误,请检查$QMAKESPEC的值。一些发行版将这个值设置为系统安装的Qt,如果unset QMAKESPEC可以解决这个问题,你可能希望把它添加到~/.bashrc脚本中。

如果你得到错误“.pch/debug-shared/QtCore”,这是因为Qt 4.3激活了你的gcc所支持的一些预编译头文件,但因为一些原因它不能为你工作。如果你使用distcc,使用-no-pch来配置Qt。如果你使用icecream,从svn主线上升级到最新的版本。

如果你的gcc支持,Qt4.3允许使用预编译的头文件,但因为某些原因它不工作。如果你使用distcc,使用 -no-pch来configure Qt.如果你使用icecream,从svn上升级到最新的版本。

尝试运行一些Qt程序,比如assistant。如果它在QSpanData::adjustSpanMethods崩溃,那你可能使用了oxygen风格。尝试删除/lib/kde4/plugins/styles/kstyle-oxygen.so/lib/kde4/plugins/styles/oxygen.so。当然,如果它们存在的话。

Strigi

Warning
如果你没有阅读设置环境而直接跳到这里的话,那下面提供的秘诀将无法工作。 秘诀没有错误,cscb也没有排版错误。为了这份教程可以正确的工作,你需要根据这些指令正确设置你的环境。


获取文件元数据(file metadata)的代码现在依赖于Strigi。要安装Strigi,你需要libz、libbz2、openssl(libcrypto或者libssl)、libclucene(>=0.9.16)以及libxml2或libexpat的库和头文件。

秘诀

cs svn checkout svn://anonsvn.kde.org/home/kde/trunk/kdesupport/strigi cd strigi cmakekde

发生了什么

先切换到源码的根目录下(第1行)。使用subversion下载Strigi的源代码(第2行),进入新的~/src/strigi目录(第3行),开始构建(第4行)。这将使我们在构建完成后仍留在Strigi的构建目录里。

kdelibs

构建好Qt4和Strigi之后,我们现在可以开始构建KDE的基础库了,如果你使用了上述的[[Getting Started/Increased Productivity in KDE4 with Scripts/.bashrc|.bashrc],里面就会有那些新的功能了。

秘诀

cd $KDE_SRC mkdir KDE && cd KDE svn checkout svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs cd kdelibs cmakekde

Tip
如果命令失败,并提示“CMake requires an out of source build directory”,请移除~/src/KDE/kdelibs/CMakeCache.txt,然后再次尝试。


Tip
{{{1}}}


发生了什么

我们先进入源文件的根目录(第1行),然后执行make并进入KDE目录(第2行)。使用subversion下载kdelibs的源码(第3行),进入新的~/src/KDE/kdelibs目录(第4行),并开始构建(第5行)。这将使我们在构建完成后仍留在kdelibs的构建目录里。

Tip
这里你的系统上可能会缺少某些依赖关系!可以通过cmakekde的输出观察到这些缺少的依赖关系。你可能希望先执行cmake ~/src/KDE/MODULE_NAME来编译一些kde模块(比如kdelibs、kdepimlibs等)


附加的KDE特定的CMake模块

kdelibs/cmake/modules/中有一些构建KDE4应用所需的附加的CMake模块。它们在kdelibs安装时会被安装。

疑难解答

如果你在编译kdelibs时遇到问题,请先确认所需软件中提到的软件是否正确的安装并且工作。其他的可能包括:

  • 如果你得到错误信息说“Please create a separate build directory and run 'cmake path_to_kdelibs [options]' there.”,那么你需要在运行cmakekde之前改变你的构建目录(例:cs KDE/kdelibs && cb && cmakekde
  • 如果Qt没有被找到或者找到了Qt的错误版本,请确认路径中的第一个qmake就是你需要的qmake。
  • 如果还是有问题,尝试CMake make-option --keep-going
  • 这里你需要libungif库,不然你将得到象这样的错误信息“Could NOT find GIF”。
  • Qt-4.3升级:如果你在kjsembed中得到关于QScriptEngine的链接错误,编辑kdelibs中的CMakeCache.txt并移除关于QT_QTUITOOLS_LIBRARY的那些行,然后再次输入make.(这个静态库有新的依赖关系,需要运行cmake的代码添加它运行所需要的)

kdepimlibs

kdelibs之后,kdebase之前,你需要构建和安装kdepimlibs

秘诀

cs KDE svn checkout svn://anonsvn.kde.org/home/kde/trunk/KDE/kdepimlibs cd kdepimlibs cmakekde

发生了什么

我们先进入KDE源码目录(第1行)。使用subversion下载kdepimlibs的源码(第2行),进入新的~/src/KDE/kdepimlibs目录(第3行),并开始构建(第4行)。这将使我们在构建完成后仍留在kdepimlibs的构建目录里。

kdebase

一些kioslaves需要kdebase。 cs KDE svn checkout svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebase cd kdebase cmakekde

疑难解答

如果你在编译kdebase时遇到问题:

  • 请确认你安装了libxss的头文件。(如果你没有这些头文件,通常你会得到“undefined references on xscreensaver objects”)
  • 那个meinproc必须放到/home/kde-devel/kde/bin/meinproc
  • 如果cmakekde无法找到kdepimlibs的路径,请编辑$KDE_BUILD/kdebase/CMakeCache.txt并手工设置KDEPIMLIBS_INCLUDE_DIR:PATH=$KDE_BUILD/kdepimlibs
  • 如果你得到错误说“Please set the following variables: X11_XTest_LIB(ADVANCED)”, 请安装Xtst的开发包。有些系统上,这个包独立于xext,并取名为x11proto-xext-dev或者libxtst-dev。在安装完软件包后,你可能需要移除构建目录下的CMakeCache.txt。
  • 和“X11_Xinerama_LIB (ADVANCED)”一样,你需要安装xinerama的开发包
  • 如果你得到错误说“Please set the following variables: FONTCONFIG_INCLUDE_DIR, FONTCONFIG_LIBRARIES (ADVANCED)”,那么你需要安装libfontconfig。

生成本地API文档

虽然KDE的API文档在api.kde.org上提供,有时在你的硬盘上有一份拷贝也是有用的,例如你想要通过KDevelop浏览这些文档或你无法上网时。

注意,生成API文档需要几个小时并占用差不多500M的磁盘空间。文档的生成通过kdelibs/doc/api下的一个脚本完成,运行这个脚本你需要doxygen

为了构建kdelibs的API文档,请输入下列命令: cs KDE mkdir apidox cd apidox ../kdelibs/doc/api/doxygen.sh ../kdelibs/

成功了!

你现在可以使用构建kdebase一样的方法构建其他svn模块,运行并测试KDE4或者编写你自己的补丁和应用程序。

关于如何在你的新的KDE4环境下开始工作,请阅读Starting a KDE4 Environment and Applications