Archive:Getting Started/Increased Productivity in KDE4 with Scripts (zh CN)

From KDE TechBase
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


Template:TutorialBrowser (zh CN)

摘要

时间宝贵。本教程分享了 David Faure 的超人智慧,通过使用一些简单的脚本和技术来开发 KDE 4,这样大大节省了我们的时间和精力。

配置环境

为什么是以用户身份安装,而不是 root?

  • 像 compile+link+install 这些只是一条简单的命令 (或者甚至是你的编辑器中的一个键), 不需要 su/sudo
  • 在构建目录中没有属于 root 文件的风险,只有当某些变化强制 make install 重新编译一些文件才可能发生。
  • 在发生某些错误时会更安全 (例如,使用错误的编译预 profix 选项可能会改写 kde3 系统)
  • "make install" 比 "make && sudo make install" 更快,因为 Makefiles 文件只解析了一次
  • 在 "sudo make install" 时不会有连接错误,因为在 "root" 的环境变量没有 LD_LIBRARY_PATH 记录。并且,配置一次环境已经非常辛苦了,为什么还要为两个用户呢?

配置开发环境

如果你想开一个单独的帐户专门用来开发,请阅读[[../Build/KDE4#Set_up_the_development_user_account|这篇文章]]。

但是,为了节省时间和避免许多麻烦,强烈建议使用你经常用的帐户。 你所要做的只是简单地在不同环境之间做一下切换。 你来到 ~/kde/src/4 目录,你想使用 KDE4 环境,不是么?

要实现这个目的,拷贝 http://web.davidfaure.fr/scripts/cd_function 到你的 .zshrc 或者 .bashrc 中,然后,把 http://web.davidfaure.fr/scripts/findup 放到你的路径下 $PATH。

这样,当你进入某个目录,它就会寻找 .my-setup 文件并向上级目录追溯,只到找到 .my-setup(而且它不会在同一方向上找到两次)。

在 ~/kde/src/4/.my-setup 文件中配置好 KDE 4 的所有环境变量 (在本页的后面将会详细介绍),其他环境也同样做(kde3,和其他任何你需要特别配置环境变量的地方...)。

路径举例

Qt

对于 Qt 而言,自 QT3 时代以来的习惯,同时也为了节省时间,我们尽量避免在一个小变化后就 "make install",我建议在一个目录下编辑源文件,构建和安装。这可以通过配置 Qt 编译预选项 -prefix=$PWD 完成 Qt with --prefix=$PWD。当然,你并不一定非要这样做。

Qt 的路径:~/qt/4/qt-copy

KDE

在 kde3 中这是可选的,但在 KDE4 中则是必需的:你需要在源代码(source)目录外进行构建,也就是说构建目录和源代码(source)目录必需是分开的。 这样做可以在出现错误后,很方便地重新构建,删除所有生成的文件 - 包括那些 "make clean" 也无法删除老文件。而且也可以更方便地查看源文件(grep,ls 等)。这样就允许在多个构建树下使用不同的配置,例如:调试用(debug)版本和发布版本。

  1. 源代码(source)目录路径: ~/kde/src/[version]
  2. 构建(Build)目录路径: ~/kde/build/[version]

因此 kde4 的源代码(source)模块是同步在 ~/kde/src/4/ 而构建是在 ~/kde/build/4/ 中进行的。

环境变量和其他有用的函数

Bash

如果你在使用 bash, 请先阅读 这个.bashrc文件.。这是一个用来设置 KDE4 环境变量和一些有帮助的函数的 bash 配置文件的例子。

下面描述了其中的一些功能并给出了其他可选的函数。

更多了解,请阅读 编译KDE模块

目录导航

你可以使用 cs 和 cb 函数来帮你很方便地在源目录和构建目录进行切换,具体操作如下:

pwd
 ~/kde/src/4/kdebase
cb && pwd
 ~/kde/build/4/kdebase
 # 注意如果这个目录不存在将会创建。
cs && pwd
 ~/kde/src/4/kdebase

许多和 KDE 相关的脚本可以做相同的事。简单点的如: export OBJ_REPLACEMENT='s#/kde/src/#/kde/build/#'

这个命令就是让 kdesdk 中的 makeobj 脚本能实现从 src 目录到构建目录转换

如果你也做了下面的操作: alias make=makeobj

这会让你只需简单地从源目录键入"make", 就可以进行构建。这在编辑器中会很有用的 - 如果你的 vi 或 emacs 是用 makeobj 做为 make 的,你就可能一键编译了。

另外,为了快速转移到其他目录,用 “cs 4/kdelibs" 将可以很方便地从任何地方转换到目录 ~/src/4/kdelibs

例如你现在在 ~/kde/src/4/kdebase/workspace/kcontrol 目录,而现在你决定查看一下kdecore... 你不需要输入一长串的 "../.." 或从头重新开始。你只需要键入 cs 4/kdelibs/kdecore 就可以了。

这也可以通过两个函数 cscb 来实现。这两个函数在 .bashrc中有定义。

其他选择

下面的代码可以让你像用 cs 一样来用 cd

export CDPATH=.:~/kde/src

这样做的优点在于,当你使用 zsh 时可以自动补全。试着输入 cd 4/kdemul 然后按 Tab 键,它将自动补全为 4/kdemultimedia,无论你现在在什么目录下。这在 bash 中是不能实现的 - 那么你现在是不是想要使用 zsh 了? :)

最简单的 cs和cb aliases (同上面的一样但是不支持参数) 如下如示:

alias cb='cd `pwd | sed -e s,/kde/src/,/kde/build/,`'

alias cs='cd `pwd | sed -e s,/kde/build/,/kde/src/,`'

返回先前目录

在 zsh 中返回先前目录很容易。在 .zshrc 中是这样设置的:

setopt AUTO_PUSHD
alias p=popd

然后你就可以输入 "p" 来跳回到你上一次所在的目录,需要多少次都可以 (输入 "dirs -v" 可以查看先前目录的历史记录)。

CMake

CMake 和子目录

cd 4/kdelibs/kio/kio ; make => 不会发生任何事,Makefile 文件在上一级目录。

让你的编辑器用外部脚本替代

#!/bin/sh
if test "$1" = "-k"; then shift; fi
cmake_in_parent=0
if test -f CMakeLists.txt; then
    if ! grep -q kde4_add CMakeLists.txt; then
        cmake_in_parent=1
        cd ..
    fi
fi
if test $# -gt 0; then
    arg="$1"
    if test "$arg" != install -a $cmake_in_parent -eq 1; then
        arg=`basename $PWD`/"$arg"
    fi
fi

jvalue=1
echo "calling makeobj -j $jvalue $arg"
makeobj -j $jvalue $arg

从这里获取脚本:http://web.davidfaure.fr/scripts/makefromemacs.

CMake和关系

touch kdecore/kapplication.h
cd kdeui ; make

=> 首先重新编译 kdecore

touch kdecore/kapplication.h
cd kdeui ; make kdeui/fast

=> 只重新编译 kdeui

make install/fast

但是请注意在其他情况下,正常模式(没有 /fast)也是可用的: 例如你编辑

kdelibs/kio/kio/kdirmodel.cpp

然后对其进行单元测试

kdelibs/kio/tests/kdirmodeltest.cpp

最后,对 libkio 进行重新编译和单元测试,简单地说就是在 kdelibs/kil/tests 下执行 ”make kdirmodeltest“ 就可以了。

KDE 4 环境变量列表

此列表列举了你要设置的所有环境变量,例如 $KDESRC/4/.my-setup 中的设置

Qt

export QTDIR=/d/qt/4/qt-copy
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$QTDIR/lib:$PKG_CONFIG_PATH

KDE

export KDEDIR=/d/kde/inst/kde4
export PATH=$KDEDIR/bin:$PATH
export LD_LIBRARY_PATH=$KDEDIR/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$KDEDIR/lib/kde4/plugins
export KDEDIRS=$KDEDIR

用户

export KDEHOME=$HOME/.kde4

其他

export QTEST_COLORED=1
export KDE_COLOR_DEBUG=1

编译一个 KDE 模块

手工编译

如果你使用了先前提到的 ~/.bashrc 它对编译 KDE 模块很实用 (前提是源代码已经获取到本地,例如通过 SVN。详细可见 KDE下使用Subversion):

cs KDE/kdebase
cmakekde

另外你还要完全以下操作:

mkdir -p ~/build/KDE/kdebase && cd ~/build/KDE/kdebase
cmake -DKDE4_BUILD_TESTS=TRUE -DCMAKE_BUILD_TYPE=debugfull \
-DCMAKE_INSTALL_PREFIX=~/kde ~/src/KDE/kdelibs
make
Tip
永远不要先把CMakeCache.txt删除再运行"make"; 在删除CMakeCache.txt后,加上合适的参数重新运行一下"cmake"。


使用 kdesvn-build 来编译

kdesvn-build 是一个全能脚本:它可以处理同Subversion 的同步和更新,运行cmake,make,make install,和存储所有的输出到日志(log)文件。

拷贝 kdesvn-buildrc-sample 到 $KDE_SRC/.kdesvn-buildrc,然后编辑。 全局选项:

  • binpath - 不要忘了到 icecream 的路径,不包括环境变量 PATH
  • qtdir, svn-server, source-dir, build-dir, kdedir

每个模块的选项:

module qt-copy
  #用 kdesvn-build 设置 $qtdir 编译预选项
  configure-flags [....]
  apply-qt-patches true
  make-options -j3 sub-src sub-tools
end module

module kdelibs
  make-options -DKDE4_BUILD_TESTS=TRUE -DCMAKE_BUILD_TYPE=debugfull
end module

KDE3 中的 KDE4 程序

Xephyr -screen 1240x768 -ac :4 &
export DISPLAY=:4
sh -x startkde 2>&1 | tee kde4.log
>./list-kde4-binaries
/d/kde/inst/kde4/bin/kwin, pid 6756
/d/kde/inst/kde4/bin/kpersonalizer, pid 6757
>./kill-kde4-binaries
Killing /d/kde/inst/kde4/bin/kwin, pid 6756
Killing /d/kde/inst/kde4/bin/kpersonalizer, pid 6757

你可以从这里http://web.davidfaure.fr/scripts/ 获取脚本 list-kde4-binaries 和 kill-kde4-binaries