• 首页
  • Qt文档
  • DTK文档
  • 玲珑文档
  • DTK入门指引

    一、必要的准备

    1. 快速开始

    编译方法适用于 deepin-20,UOS20。  
    建议准备一个干净的虚拟机环境,下面的安装过程都可以不看,直接执行后面的脚本。  
    如果你需要掌握详细的构建流程,那么请一步一步往下看。
    

    2. 激活系统并取得 root 权限

    Deepin 社区版的可以直接获取root权限进行开发, DTK 桌面系统适用于 UOS 各个版本;
    UOS 专业版可以直接获取试用期激活,个人版会联网自动激活,在设置中心进入开发者模式,以使用 root 权限进行开发;  
    

    3. 安装开发环境

    sudo sed -i "s%#deb-src%deb-src%g" /etc/apt/sources.list
    sudo apt update
    sudo apt install git qtcreator qt5-default build-essential  
    
    • 安装期间有很多提示:dpkg-query: 软件包 xxxx 没有被安装。忽略即可。

    • 安装期间会有弹窗提示,要选 yes。

    • 注意,apt 使用官方的源获取,请勿手动修改源。

    二、DTK 环境配置

    1. 项目源码获取

    DTK 用到的主要是 dtkcore,dtkwidget,dtkgui,qt5integration 这几个库。   
    git 的代码你可以同步到 gitee 进行下载,替换成你自己的链接即可。  
    
    • git 获取:
    clone_uri="https://github.com/linuxdeepin"
    clone_list="dtkcore dtkgui dtkwidget qt5integration";
    for i in $clone_list; do git clone $clone_uri/$i.git; done;
    
    • apt 获取:
    apt source dtkcore dtkwidget dtkgui qt5integration
    
    每个项目都可以独立编译,项目所依赖的环境,可以在以下位置的 control 文件里面找到:    
    
    find . -name "control"
    

    ./dtkwidget-5.4.16/debian/control
    ./qt5integration-5.1.11/debian/control
    ./dtkcore-5.4.13/debian/control
    ./dtkgui-5.4.13/debian/control

    查看依赖项: 
    
    head -n 20 ./dtkwidget-5.4.16/debian/control
    
    Build-Depends 后面这些就是该项目所依赖的包,可以使用 apt 命令全部安装,后面有更便捷的方法去安装这些依赖:  
    

    Source: dtkwidget
    Section: libdevel
    Priority: optional
    Maintainer: Deepin Packages Builder packages@deepin.com
    Build-Depends: debhelper (>= 9), pkg-config, libudev-dev, libqt5x11extras5-dev, libxext-dev, qttools5-dev-tools, x11proto-xext-dev, libxcb-util0-dev, libstartup-notification0-dev, libmtdev-dev, qtbase5-private-dev, libegl1-mesa-dev, libudev-dev, libfontconfig1-dev, libfreetype6-dev, libglib2.0-dev, libxrender-dev, libdtkcore-dev, libgsettings-qt-dev, libqt5svg5-dev, libxi-dev, libdtkgui-dev, libcups2-dev, libgtest-dev

    2. 安装依赖

    使用一行命令安装以上全部的依赖:  
    
    sudo apt build-dep dtkcore dtkwidget dtkgui qt5integration
    

    三、编译及运行

    1. 手动编译的方法

    从git获取的代码,使用命令行编译的方法:

    cur_dir=`pwd`
    dtk_list="dtkcore dtkgui dtkwidget qt5integration";
    for i in $dtk_list; do mkdir -p $i/build; cd $i/build; qmake ../*.pro CONFIG+=debug && make -j4 && cd $cur_dir; done;
    
    也可以打开 qtcreator 直接编译,其它几个项目也是一样的。
    打开的项目的时候注意要选择 debug 版本:  
    
    cd qt5inteegration && nohup qtcreator *.pro
    

    编译成功以后,可以运行如下几个示例程序:

    # qt5inteegration 示例的生成目录:  
    ./qt5inteegration/bin/styles  
    

    dtkwidget 示例的生成目录:

    ./dtkwidget/examples/dwidget-examples/collections/collections

    dtkgui 示例的生成目录: ./dtkgui/bin/taskbar

    
    > 下面是一些有用的命令,可能对你有帮助:  
    

    sudo apt --fix-broken install # 如果安装的时候遇到版本问题可修复后重新安装 apt depends deepin-sdk # 查看库之间的依赖关系 apt depends libdtkwidget-dev # 带 dev 的是编译时库,不带 dev 的是运行时库 apt policy deepin-sdk # 查看当前版本和最新可安装版本

    ## 2. 自动化编译运行脚本
      该脚本是从 apt 源里面获取源码。如果有提交代码的需要请从 git 上获取代码。
      将以下内容保存到桌面上的 build.sh 里面:
    

    #!/bin/sh

    DTK主要就是下面几个库

    DTK_LIST="dtkcore dtkwidget dtkgui qt5integration"

    1.更改源以获取 DTK 源码、相关依赖软件

    sudo sed -i "s%#deb-src%deb-src%g" /etc/apt/sources.list sudo apt update

    2.安装 git、Qt、编译工具集

    sudo apt -y install git qtcreator qt5-default build-essential

    3. 安装 DTK 依赖环境

    sudo apt -y build-dep $DTK_LIST

    4.在桌面创建目录存放源码

    WORK_SPACE=~/Desktop/DTK_SRC && mkdir -p $WORK_SPACE && cd $WORK_SPACE

    5.下载代码

    apt source $DTK_LIST

    6.建立 build 目录并编译

    SRC_LIST=$(find . -maxdepth 1 -mindepth 1 -type d) for proj in $SRC_LIST; do mkdir -p $proj/build && cd $proj/build; qmake ../*.pro CONFIG+=debug && make -j4 && cd $WORK_SPACE; done;

    7. 查看编译产物

    find . -perm /111 ! -type d ! -name "*.[[:digit:]]" ! -regex ".*(.svg|.sh|.json)" # 全部可执行文件、动态库等

    echo "======================编译完成========================"

    dtkgui、dtkwidget 的示例以及全部的库整合到 qt5integration 里面所写的示例程序:

    echo "示例程序:" EXAMP=$(find . -type f -perm /111 -regex ".*(collections|styles|taskbar)") echo "$EXAMP"

    echo "动态库:" find . -name "*.so" echo "单元测试:" find . -type f -perm /111 -name "tests"

    运行示例程序,必须是桌面环境才行,不能是 ssh 连接虚拟机

    if [ -n $DISPLAY ] then for exe in $EXAMP; do $exe & done; fi

    > 将以上内容保存并执行:`sh ./build.sh`(注意不要加sudo,手动输入密码)。
    
      如果有基于 DTK 的库开发自己的应用程序的需要,则可以使用以下命令安装 DTK 的库:
    

    sudo apt -y install deepin-sdk # 就是安装已编译好的 dtkcore、dtkgui、dtkwidget 库

    ## 3.常见问题
    * 如果某个项目第一次编译失败了,依赖安装后不能直接编译,要清空源码,或者执行 git clean -dfx 清空生成的文件再次去编译才行。  
    
    * 更安全的做法:树外编译,即单独建立 build 目录,在里面执行: `qmake ..`,不会污染源码。
    
    * 遇到版本不兼容的问题导致安装失败,执行 sudo apt --fix-broken install 后再次安装就可以了。
    
    * 一般来说,不要超过 4 线程去编译源码,除非依赖关系非常严格且明确(实际上自动生成Makefile往往很难严格的保证这一点),否则部分情况下可能会编译失败,需要全部清空重来。  
    
    * 注意使用 qtcreator 打开的时候要选debug版本才会有图形界面,否则只有单元测试:
    ![](/upload/1619660301659131853.png)   
    
    * 使用命令行编译时,qmake 后面要加 CONFIG+=debug,否则没有示例程序只有单元测试:
     ![](/upload/1619660308265930786.png)