如何从源代码构建Unity?

我想知道如何在当前的开发版本中从源代码构建Unity。请涵盖以下主题:
- 编译Unity需要哪些软件包? - 我应该从哪里获取当前的源代码? - 实际配置和编译Unity的步骤是什么? - 是否可以安全地与存储库中的版本同时运行最新版本?
6个回答

从源代码构建Unity

在本指南中,您将构建一个独立的Unity主干版本(安装在您的主目录下),因此您不必担心损坏Ubuntu软件仓库中的版本,而且在整个过程中也不需要获取root权限(除非安装构建依赖项)。

0. 安装构建依赖项

您需要运行以下命令一次性安装所有必要的构建依赖项:

sudo apt-get install bzr cmake compiz-dev gnome-common libbamf3-dev libboost-dev \
libboost-serialization-dev libgconf2-dev libgdu-dev libglewmx1.6-dev \
libgnome-desktop-3-dev libibus-1.0-dev libindicator3-dev libjson-glib-dev \
libnotify-dev libnux-2.0-dev libpci-dev libsigc++-2.0-dev libunity-dev \
libunity-misc-dev libutouch-geis-dev libxxf86vm-dev libzeitgeist-dev xsltproc

如果您启用了源代码存储库(也称为deb-src),您可以使用以下方法:
sudo apt-get build-dep unity

1. 准备环境
SOURCEPREFIX替换为您想要源代码和构建文件存放的目录。在这个例子中,我把它们都放在我的主目录下:
export SOURCE=$HOME/source/unity
export PREFIX=$HOME/build/unity

export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH"
export LD_RUN_PATH="$PREFIX/lib:$LD_RUN_PATH"
export XDG_DATA_DIRS="$PREFIX/share:$XDG_DATA_DIRS"

mkdir -p "$PREFIX"
mkdir -p "$SOURCE"
cd "$SOURCE"

2. 构建 Nux
你可能需要获取最新版本的 Nux 来编译 Unity trunk:
bzr branch lp:nux
cd nux
./autogen.sh --disable-examples --disable-gputests --disable-tests --prefix="$PREFIX"
make -j4
make install
cd ..

提示:大多数现代台式机和笔记本电脑都有多个核心。您可以通过利用这一点来大大加快编译速度。make命令内置支持此功能,您可以使用-jN开关来激活,其中N是要并行运行的作业数量。一个很好的经验法则是在处理器上运行2倍的核心数量。因此,在普通双核计算机上,您应该运行make -j4以最小化编译时间。

3. 构建Unity

现在获取最新的Unity代码并进行构建:

bzr branch lp:unity
cd unity
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PLUGIN_INSTALL_TYPE=local -DGSETTINGS_LOCALINSTALL=ON -DCMAKE_INSTALL_PREFIX="$PREFIX"
make -j4
make install

就是这样,退出然后重新登录,你应该能够运行最新的Unity了。或者,你也可以运行。
setsid $PREFIX/bin/unity

4. 更新

请确保按照第一步中描述的方式准备环境,然后直接进入顶层目录nuxunity,运行bzr pull,重新构建并重新安装。

我建议在unity目录中删除并重新创建build目录,以确保没有旧文件干扰您的构建。

5. 移除Unity

删除三个目录$SOURCE$PREFIX~/.compiz-1


有用的链接:


我认为有一件非常重要的事情,就是克隆我们目前使用的版本,例如在Ubuntu 12.04上,我尝试克隆Nux的最新版本,结果变得混乱不堪,因为Nux使用了sharedptr,但似乎12.04上的gcc不支持,或者需要在make文件中添加一些标志。因此,克隆适合我的系统的确切版本非常重要。 - Muhammad Hewedy
14.04上的part 0都不工作。 - Goddard
xserver-xorg-video-dummy: 依赖于 xorg-video-abi-15 依赖于 xserver-xorg-core(>= 2:1.14.99.902) - Goddard


在您的主目录中构建

有时为了测试的目的,在您的主目录中构建Unity和nux是很有用的,这样您就可以尝试查看是否在主干中修复了某些问题,而不必费心处理软件包和/或PPA。我向Jason Smith(Unity开发人员)询问了他如何构建Unity,他向我解释了他的方法:

确保您拥有此答案中的所有构建依赖项
首先,在您的主目录中创建一个名为“staging”的目录,这是我们将构建Unity的地方。创建一个小脚本来准备构建环境,将主目录替换为您自己的目录:
#!/bin/bash
PREFIX=/home/jorge/staging
export XDG_DATA_DIRS="$PREFIX/share:$XDG_DATA_DIRS" export LD_LIBRARY_PATH="$PREFIX/lib/" export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig/"
我将其命名为unity.sh,并在每次构建Unity时运行它。所以基本上chmod +x unity.sh,然后当您想要构建时运行./unity.sh。
构建nux:
bzr branch lp:nux cd nux ./autogen.sh --prefix=/home/jorge/staging make -j4 make install cd ..
构建Unity:
bzr branch lp:unity cd unity mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX=/home/jorge/staging/ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PLUGIN_INSTALL_TYPE=local -DGSETTINGS_LOCALINSTALL=ON make -j4 make install
注意:这会在您的主目录中构建Nux和Unity,不需要使用sudo或其他类似的命令。
登出并重新登录后,将自动运行此版本的Unity/nux,因为它是在“~/.compiz”中构建的。
要恢复到正常的软件包,只需登出,删除“~/.compiz”,然后重新登录。

默认环境(Unity)的源代码可以在软件包unity中找到。使用apt-get source unity安装源代码,使用sudo apt-get build-dep unity安装构建所需的依赖项,然后开始进行修改。
这将允许您将启动器放置在右侧、底部、顶部等位置。

你能详细说明如何改变位置吗?只要知道需要修改哪个文件或配置就太棒了。 - PitaJ

这里有一份出色的官方文档 - 开发Unity

以下是其中关于构建Unity的摘录 - 从源代码安装和编译。

建立统一 这些说明将帮助您从源代码构建统一。然而,有几个要考虑的事项:
- 强烈建议您永远不要将您构建的任何内容复制到家目录之外的本地位置。这样做会引来麻烦,特别是因为我们正在构建整个桌面环境。如果您成功破坏了系统范围的桌面环境,您将成为一个非常沮丧的程序员!
- 假设您正在运行精确的Ubuntu版本。
- 还假设您想从主干(即lp:unity)构建统一。 获取源代码: 如果您尚未安装Bazaar,请立即安装它:
sudo apt-get install bzr 您将需要为统一代码创建一个文件夹。可以像这样操作:
mkdir -p ~/code/unity cd ~/code/unity
让我们从launchpad获取代码:
bzr branch lp:unity trunk
这可能需要一些时间。 安装构建依赖项: 我们需要获取统一的构建依赖项。谢天谢地,apt-get使这变得简单:
sudo apt-get build-dep unity 编译统一: 使用以下一组bash函数可以使此步骤更加容易。要使用它们,请将以下bash代码复制到名为.bash_functions的文件中,并放在您的主目录中:
function recreate-build-dir() { rm -r build mkdir build cd build }
function remake-autogen-project() { ./autogen.sh --prefix=$HOME/staging --enable-debug make clean && make && make install }
function remake-unity() { recreate-build-dir cmake .. -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PLUGIN_INSTALL_TYPE=local -DCMAKE_INSTALL_PREFIX=$HOME/staging/ -DGSETTINGS_LOCALINSTALL=ON make && make install }
function unity-env { export PATH=~/staging/bin:$PATH export XDG_DATA_DIRS=~/.config/compiz-1/gsettings/schemas:~/staging/share:/usr/share:/usr/local/share export LD_LIBRARY_PATH=~/staging/lib:${LD_LIBRARY_PATH} export LD_RUN_PATH=~/staging/lib:${LD_RUN_PATH} export PKG_CONFIG_PATH=~/staging/lib/pkgconfig:${PKG_CONFIG_PATH} export PYTHONPATH=~/staging/lib/python2.7/site-packages:$PYTHONPATH }
现在在终端中运行以下命令:
echo ". ~/.bash_functions" >> ~/.bashrc
这将确保下次打开bash shell时,上述列出的函数将对您可用。为了避免必须关闭和重新打开终端,我们可以手动读取它们只需一次:
. ~/.bash_functions
现在,您应该能够从我们之前创建的trunk/目录中运行:
remake-unity
就是这样 - 您正在构建统一!

安装变得更加棘手了:compiz中添加了一个名为GTK Load的新模块(否则会在XInternAtom中崩溃)。我们需要激活这个模块来使用4.0.1版本,但是激活它会导致unity 3.8崩溃。
保持两者的同时变得困难了。 我做的方法是:
  • 进入compiz-1文件夹,将所有.so文件重命名为.so1,除了libgtkloader.so
  • 使用unity 4.0.1重新启动compiz
  • 在compizconfig-settings-manager中激活gtk Load模块
  • 将库文件重新命名为.so
  • 重新启动compiz。