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

From KDE TechBase
(New page: {{Template:I18n/Language Navigation Bar|Getting_Started/Increased Productivity in KDE4 with Scripts}} {{TutorialBrowser| series=Getting Started| name=Increasing Your Productivity With S...)
 
No edit summary
Line 11: Line 11:
}}
}}


== Abstract ==
== 摘要 ==


Time is precious. This tutorial shares David Faure's collected wisdom for how to get the most of our time and effort by saving on both using some simple scripts and techniques while developing KDE 4.
时间宝贵。本教程分享了 David Faure 的超人智慧,通过使用一些简单的脚本和技术来开发 KDE 4,这样大大节省了我们的时间和精力。


== Setting Up the Environment ==
== 配置环境 ==


=== Why install as user and not as root? ===
=== 为什么是以用户身份安装,而不是 root?===
*a single command to compile+link+install (or even a single key in your editor), no su/sudo needed
*compile+link+install 这些只是一条简单的命令 (或者甚至是你的编辑器中的一个键), 不需要 su/sudo
*no risk of root-owned files in the builddir, as can happen when some change forces make install to recompile some files
*在构建目录中没有属于 root 文件的风险,只有当某些变化强制 make install 重新编译一些文件才可能发生。
*safer if something goes wrong (for instance, using the wrong prefix would overwrite the system kde3)
*在发生某些错误时会更安全 (例如,使用错误的编译预 profix 选项可能会改写 kde3 系统)
*make install is faster than "make && sudo make install" since the Makefiles are parsed only once
*make install "make && sudo make install" 更快,因为 Makefiles 文件只解析了一次
*no link errors during sudo make install due to root's environment missing entries in LD_LIBRARY_PATH. Really, setting up the environment once is hard enough, why do it for two users?
*sudo make install 时不会有连接错误,因为在 root 的环境变量没有 LD_LIBRARY_PATH 记录。并且,配置一次环境已经非常辛苦了,为什么还要为两个用户呢?


=== Set up for development ===
=== 配置开发环境 ===


If you really want to use a separate account for development, see [[../Build/KDE4#Set_up_the_development_user_account|here]].
如果你想开一个单独的帐户专门用来开发,请阅读[[../Build/KDE4#Set_up_the_development_user_account|here]]


But to save time and avoid many problems, it is strongly recommended to do it all from your usual user.
但是,为了节省时间和避免许多麻烦,强烈建议使用你经常用的帐户。
All you need is an easy way to switch between environments.
你所要做的只是简单地在不同环境之间做一下切换。
You go to ~/kde/src/4, you want to be in the kde4 environment, right?
你来到 ~/kde/src/4 目录,你想使用 KDE4 环境,不是么?


To do this, paste http://web.davidfaure.fr/scripts/cd_function into your .zshrc or .bashrc, and put http://web.davidfaure.fr/scripts/findup in your $PATH.
要实现这个目的,拷贝 http://web.davidfaure.fr/scripts/cd_function 到你的 .zshrc 或者 .bashrc 中,然后,把 http://web.davidfaure.fr/scripts/findup 放到你的路径下 $PATH。


This way, whenever you enter a directory, it will look up a .my-setup file and source it (it also looks up in parent directories until it finds one, and it doesn't source the same one twice in a row).
这样,当你进入某个目录,它就会寻找 .my-setup 文件并向上级目录追溯,只到找到 .my-setup(而且它不会在同一方向上找到两次)。


Set up all the environment variables that are specific to kde4 (they will be detailed later on in this page) into that ~/kde/src/4/.my-setup file, and do the same for other environments (kde3, and anywhere you need project-specific environment variables...)
~/kde/src/4/.my-setup 文件中配置好 KDE 4 的所有环境变量 (在本页的后面将会详细介绍),其他环境也同样做(kde3,和其他任何你需要特别配置环境变量的地方...)


=== Example paths ===
=== 路径举例 ===


==== Qt ====
==== Qt ====
For Qt, by habit from the Qt3 times and to save time by avoiding "make install" after a change, I recommend using one directory for source, builds and install. This is done by configuring Qt with --prefix=$PWD. This isn't mandatory though.
对于 Qt 而言,自 QT3 时代以来的习惯,同时也为了节省时间,我们尽量避免在一个小变化后就 "make install",我建议在一个目录下编辑源文件,构建和安装。这可以通过配置 Qt 编译预选项 -prefix=$PWD 完成 Qt with --prefix=$PWD。当然,你并不一定非要这样做。


Qt-Path: {{path|~/qt/4/qt-copy}}
Qt 的路径:{{path|~/qt/4/qt-copy}}


==== KDE ====
==== KDE ====
It was convenient in kde3, it is mandatory in kde4: you need to use out-of-source builds, i.e. separate build and source directories.
kde3 中这是可选的,但在 KDE4 中则是必需的:你需要在 source 目录外进行构建,也就是说构建目录和 source 目录必需是分开的。
It makes it very easy to rebuild from scratch, removing all generated files - even old ones that "make clean" wouldn't remove. It is easier to look at the source files (grep, ls etc.). It allows multiple build trees with different settings, e.g. debug and release.
这样做可以在出现错误后,很方便地重新构建,删除所有生成的文件 - 包括那些 "make clean" 也无法删除老文件。而且也可以更方便地查看源文件(grep,ls 等)。这样就允许在多个构建树下使用不同的配置,例如:debug 和 发布。


# Source: {{path|~/kde/src/[version]}}
# Source 路径: {{path|~/kde/src/[version]}}
# Build:  {{path|~/kde/build/[version]}}
# Build 路径:  {{path|~/kde/build/[version]}}


Thus source modules for kde4 are checked out in {{path|~/kde/src/4/}} and building happens in {{path|~/kde/build/4/}}.
因此 kde4 的 source 模块是同步在 {{path|~/kde/src/4/}} 而构建是在 {{path|~/kde/build/4/}} 中进行的。


== Environment Variables and other helpful functions ==
== 环境变量和其他有用的函数 ==


=== Bash ===
=== Bash ===
If you use bash, take a look at [[Getting Started/Increased Productivity in KDE4 with Scripts/.bashrc|this .bashrc]]. It is an example bash config which sets all KDE4 environment variables and some helper functions.
如果你在使用 bash, 请先阅读 [[Getting Started/Increased Productivity in KDE4 with Scripts/.bashrc|this .bashrc]].。这是一个用来设置 KDE4 环境变量和一些有帮助的函数的 bash 配置文件的例子。


The steps below describe some of these features as well as giving alternative and additional functions.
下面描述了其中的一些功能并给出了其他可选的函数。


Read further about [[#Compiling_a_KDE_module|compiling a KDE module]].
更多了解,请阅读 [[#Compiling_a_KDE_module|compiling a KDE module]]


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


To easily swap from build and source folder back and forth, you can use cs and cb functions that work like the following:
<code bash>
<code bash>
pwd
pwd
Line 71: Line 72:
cb && pwd
cb && pwd
  ~/kde/build/4/kdebase
  ~/kde/build/4/kdebase
  # note that this folder is created if it does not exist
  # 注意如果这个目录不存在将会创建。
cs && pwd
cs && pwd
  ~/kde/src/4/kdebase
  ~/kde/src/4/kdebase
Line 240: Line 241:
[[Category:Shell Scripting]]
[[Category:Shell Scripting]]
[[Category:KDE4]]
[[Category:KDE4]]
v

Revision as of 09:21, 1 May 2008


Getting_Started/Increased Productivity in KDE4 with Scripts


Increasing Your Productivity With Scripts
Tutorial Series   Getting Started
Previous   [[../Build/KDE4]]
What's Next   n/a
Further Reading   Original presentation by David Faure

摘要

时间宝贵。本教程分享了 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|here]]。

但是,为了节省时间和避免许多麻烦,强烈建议使用你经常用的帐户。 你所要做的只是简单地在不同环境之间做一下切换。 你来到 ~/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, 请先阅读 this .bashrc.。这是一个用来设置 KDE4 环境变量和一些有帮助的函数的 bash 配置文件的例子。

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

更多了解,请阅读 compiling a KDE module

目录导航

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

pwd

~/kde/src/4/kdebase

cb && pwd

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

cs && pwd

~/kde/src/4/kdebase

A number of kde-related scripts will have to be able to do the same. Simply do: export OBJ_REPLACEMENT='s#/kde/src/#/kde/build/#' This allows the makeobj script from kdesdk to switch from src to build. If you also do: alias make=makeobj then you can simply type make from the source dir and it will be able to build. This is also very useful in editors - if your vi or emacs uses makeobj as the make command, you can compile with a single key press.

In addition, for fast navigation to other directories, it is very convenient to be able to type "cs 4/kdelibs" in order to go to ~/src/4/kdelibs, from anywhere. For instance, you could be in ~/kde/src/4/kdebase/workspace/kcontrol and now you decide to look at kdecore... No need to type a long series of "../.." or to restart from the top. You can just type cs 4/kdelibs/kdecore.

This is doable via the two functions cs and cb defined in the .bashrc.

Alternative

The following code will enable you to use cd similar to cs described above: export CDPATH=.:~/kde/src The advantage, when using zsh, is that completion even works. Try cd 4/kdemul and press Tab, it will complete to 4/kdemultimedia, no matter where you currently are. Doesn't work in bash though - but surely you're using zsh by now, aren't you? :)

The minimal cs and cb aliases (same as above but without support for arguments) are: alias cb='cd `pwd | sed -e s,/kde/src/,/kde/build/,`' alias cs='cd `pwd | sed -e s,/kde/build/,/kde/src/,`'

Going back to the previous directory

Going back to the previous directory easily can be done with zsh. Set this in .zshrc: setopt AUTO_PUSHD alias p=popd and then you can type "p" to pop back to the directory where you were last, as many times as needed (type "dirs -v" to see the stack of previous directories).

CMake

CMake and subdirs

cd 4/kdelibs/kio/kio ; make => nothing happens, the Makefile is in the parent directory.

Make your editor use a wrapper script instead

  1. !/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

Get this script: http://web.davidfaure.fr/scripts/makefromemacs.

CMake and dependencies

touch kdecore/kapplication.h
cd kdeui ; make

=> recompiles kdecore first

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

=> recompiles only kdeui

make install/fast

But note that the normal mode (without /fast) is also useful in other cases: For instance you edit

kdelibs/kio/kio/kdirmodel.cpp

and the unit test for it

kdelibs/kio/tests/kdirmodeltest.cpp

Then, to recompile both libkio and the unit test, simply do "make kdirmodeltest" from kdelibs/kio/tests.

List of KDE 4 environment variables

This lists all the environment variables you should set, for instance in $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

User

export KDEHOME=$HOME/.kde4

Others

export QTEST_COLORED=1 export KDE_COLOR_DEBUG=1

Compiling a KDE module

Manually

If you use the aforementioned ~/.bashrc it is very convenient to compile a KDE module (it is required to already have aquired the source code, e.g. via SVN. see Using Subversion with KDE): cs KDE/kdebase cmakekde

Else you'll have to do the following: 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
Never delete CMakeCache.txt and then type make; always re-run cmake with the correct options after deleting CMakeCache.txt.


Using kdesvn-build

kdesvn-build is an all-in-one script: it handles the checking-out or updating from subversion, running cmake, make, make install, and storing all output in log files.

Copy kdesvn-buildrc-sample to $KDE_SRC/.kdesvn-buildrc, then edit it. Global options:

  • binpath - don't forget the path to icecream, the PATH env var doesn't count
  • qtdir, svn-server, source-dir, build-dir, kdedir

Per-module options:

module qt-copy
  # kdesvn-build sets the prefix to $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

KDE4 programs in KDE3

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

You can get the scripts list-kde4-binaries and kill-kde4-binaries from http://web.davidfaure.fr/scripts/ v