首先我们要去DTK开发者文档参观下,具体参观什么,你需要什么就参观什么
地址:https://docs.deepin.org
编译DTK需要编译以下三个东西:
dtkcore
dtkgui
dtkwidget
三个项目分别为

git clone https://github.com/linuxdeepin/dtkcore.git
git clone https://github.com/linuxdeepin/dtkgui.git
git clone https://github.com/linuxdeepin/dtkwidget.git

dtkcore的静态编译:
我们先去github(大型交友网站)上把dtkcore的源码clone下来
因为deepin在现在的DTK版本中已经做了大量修改,现在的dtkcore已经不支持静态编译了或者说支持静态编译,且只有DTK官方知道,大概是为了融合DTK SDK的原因吧。但是对于开发者来说,我们在某些时候需要DTK静态编译。

第一步:
所以想静态编译DTK我们需要几个文件:

dtk_build.prf
dtk_cmake.prf
dtk_qmake.prf
dtk_module.prf
dtk_translation.prf
dtk_build_config.prf

其中我们把前面5个文件丢在dtkcore/src下面
把最后一个文件放在dtkcore下.
然后打开QT,加载项目pro。这个时候不要加载dtkcore.pro而是加载dtkcore下src目录下的pro。
然后他会让你选择Configure Project,则采用在另外一个文章静态编译的QT。另外一个文章

第二步:
此时我们能看见QT加载项目,同时会出现以下错误:
Cannot find feature dtk_build
Cannot find feature dtk_cmake
Cannot find feature dtk_module
此错误表示找不到这三个东西且无法加载,这三个本来是load的。但是我们没有DTK SDK
所以需要手动指定文件,
在dtkcore/src.pro文件中我们可以看到下面三行

load(dtk_build)
load(dtk_cmake)
load(dtk_module)

我们修改这三行为我们刚才丢进去的src目录下的文件。具体改为如下

include(dtk_build.prf)
include(dtk_cmake.prf)
include(dtk_module.prf)

同时我们需要对版本检测进行忽略
在dtkcore/src.pro文件顶部的CONFIG+=后面增加skip_target_version_ext,完整如下

CONFIG += link_pkgconfig  skip_target_version_ext

以上修改完毕后,我们需要修改编译出来的静态库安装在哪里?
于是打开dtk_build_config.prf文件,找到如下代码
X设置:

isEmpty(PREFIX){PREFIX = /home/jacklee/DTK/libdtk/dtkcore
}

提示错误:
QGSettings/QGSettings:No such file or directory
则打开对应错误提示cpp
然后把#include <QGSettings/QGSettings>改为如下:

#include <QGSettings>

编译完成!
然后采用终端定位到QT构建设置->Build Directory设置的目录下执行安装

make install

这个时候你的dtkcore静态库会出现在你上面X设置中PREFIX目录下了。

dtkgui的静态编译:

第一步:托取dtkgui源码
按照上面编译dtkcore的方法,同样我们需要dtkcore的文件,我们可以直接从dtkcore里面复制到dtkgui/src的目录下
第二步:我们用QT加载dtkgui/src目录下的src.pro
同样在QT的项目设置中设置好构建目录也就是Build Directory
第三步修改dtkgui的src.pro文件
在src.pro文件中的load同样如同编译dtkcore的时候的load改为include
同时也要修改dtk_build_config.prf目录中的PREFIX的地址
第四步:进行编译
编译完成后,同样进入dtkgui的编译目录Build Directory目录下执行

make install

dtkwidget编译:
首先关于修改文件和移动文件我就不再叙述了,按照编译dtkcore和dtkgui的方法来.
在修改dtkwidget项目src.pro文件时候我们可以看到在src.pro下有一行
QT += dtkcore5.5
此时我们把5.5去掉,如下

QT +=dtkcore

同时我们在QT +=dtkcore下增加对版本的忽略。如下

CONFIG += internal_module skip_target_version_ext

将以下代码中的5.5去掉

QT += network concurrent dtkgui5.5 printsupport printsupport-private

完整如下:

QT += network concurrent dtkgui printsupport printsupport-private

错误提示:
QGSettings/QGSettings:No such file or directory
同样删除多余的QGSettings
编译完毕后,进入设定的编译目录,进行make isntall安装
就此 DTK套件的三部曲已经编译完毕
结下来是对DTK套件三个静态库的使用,我们将利用dtkwidget中的examples作为讲解。
QT加载好examples项目下的collections.pro项目文件
我们需要把collections.pro文件中的dtkcore5.5和dtkgui5.5中的版本号去掉。
然后增加
CONFIG +=static
同时删除以下代码:

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../../src/release -ldtkwidget
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../../src/debug -ldtkwidgetd
else:unix: LIBS += -L$$OUT_PWD/../../../src -ldtkwidgetINCLUDEPATH += $$PWD/../../../src
INCLUDEPATH += $$PWD/../../../src/widgets
INCLUDEPATH += $$PWD/../../../src/util
DEPENDPATH += $$PWD/../../../src

将上诉代码改为下面:

unix:!macx: LIBS += -L$$PWD/../../../../libdtk/dtkcore/lib/ -ldtkwidget -ldtkgui -ldtkcore -lgsettings-qt -lXext -lX11 -lXi -lxcb-util -lxcb -lstartup-notification-1INCLUDEPATH += $$PWD/../../../../libdtk/dtkcore/include/libdtk-5.4.0/DWidget
DEPENDPATH += $$PWD/../../../../libdtk/dtkcore/include/libdtk-5.4.0/DWidgetunix:!macx: PRE_TARGETDEPS += $$PWD/../../../../libdtk/dtkcore/lib/libdtkwidget.a
unix:!macx: PRE_TARGETDEPS += $$PWD/../../../../libdtk/dtkcore/lib/libdtkgui.a
unix:!macx: PRE_TARGETDEPS += $$PWD/../../../../libdtk/dtkcore/lib/libdtkcore.a

然后进行对collections.pro项目的编译。注意
编译出来的程序依然对libQTCore5有依赖。主要原因是我们使用了gsettings-qt库。想要不依赖libQTCore5.so,请对gsettings-qt加载静态库
编译完毕后,在编译目录下直接执行collections的demo即可。查看该collections的采用ldd的方法。如下
ldd collections
虽然静态编译体积过大,但是可以省掉因为中间库更新,迭代导致的BUG问题。

有人要问:那编译dtkcore dtkgui dtkwidget的那个prf文件在那里搞。
项目地址如下请自行抄作业:
https://gitee.com/JackLee02/dtk-dtkcore-dtkgui-dtkwidget-static-build

本次教程到此结束,下次我们讲解windows编译DTK套件
enjoy!

DeepinUOS Linux QT5.12.10静态编译DTK教程相关推荐

  1. Linux QT5.12 一种整体界面字体设置的方法及设置PlainTextEdit组件的字体大小方法

    1.在Linux QT5.12开发界面时,经常会涉及到界面字体大小的设置,默认字体一般比较小,解决方法如下: 在main函数中添加代码: //============================= ...

  2. VS2019++QT5.12.10+PCL1.11.1+VTK8.2.0+opencv(camke3.18.0)环境搭配及演示实例

    一.参考链接: 1.VS2019+QT5.12.10+PCL1.11.1+VTK8.2.0(cmake3.20.4)环境搭配_寒木休思的博客-CSDN博客 2.VS2019+PCL1.11.1+VTK ...

  3. windows和linux添加引导文件,Linux与Windows 10用grub引导教程-Go语言中文社区

    前言 去年暑假的时候,写了一篇如何装 Linux 和 Windows 10 双系统的文章发在了简书上,我写这篇文章的原因是当初装双系统确实是折腾了许久,网上也找不到一篇详尽的教程.由于去年对于写教程还 ...

  4. linux emule 编译 wx-config --libs,Linux下的wxWidgets静态编译实现方法

    --Linux distribution:Ubuntu 10.04.3 LTS (Lucid Lynx) --wxWidgets version:2.8.12 --gcc version:4.4.3 ...

  5. Qt5.14.2MinGW-32静态编译及压缩过程配置教程

    目录 下载 下载Qt5.14.2 下载upxn 下载Python2 安装 检查配置 检查perl版本 检查python版本 静态编译 配置 编译 安装 新增静态编译环境 添加Qt Version 添加 ...

  6. win10下QT5.11.1静态编译(带MYSQL)

    编译前准备工作: 下载QT5.11.1 https://download.qt.io/archive/qt/5.11/5.11.1/ 下载Python: https://www.python.org/ ...

  7. QT5.15.2静态编译MSVC2019

    下载源码: 官网:下载地址 腾讯源:下载地址 清华源:下载地址 查看源码编译环境 源码目录中的README文件 Windows:    -------- Open a command prompt. ...

  8. QT5静态编译教程,主要针对vs2012

    - 本帖被 XChinux 设置为精华(2013-03-24) - QT5,VS2012静态编译,所有的库准备充分的话qwebkit也可以静态编译通过,但是我编译的版本使用中如果用了QWEBVIEW控 ...

  9. Qt 5.12.10 用Design ui 设计界面,连续输入中文时,变成英文输入

    情景: Qt 版本:Qt5.12.10 问题: 使用ui设计器设计界面时,如果连续输入中文,会变成英文,无法正常输入中文. 解决办法:在界面输入中文后,实时保存下,然后继续输入中文,情况有所改善.具体 ...

最新文章

  1. ajax 加载 提示 锁屏,js锁屏解屏通过对$.ajax进行封装实现
  2. android 两种设置全屏的activity方式
  3. HDFS API编程之副本系数
  4. js中的数据类型分为两大类分别是什么_数据类型有这么重要吗?
  5. eBPF技术应用云原生网络实践系列之基于socket的service | 龙蜥技术
  6. 蓝桥杯 ADV-221 算法提高 7-1用宏求球的体积
  7. 语音识别asr是什么
  8. 【转载】shell中EOF的用法
  9. 牛逼!终于有人开源了一份基于SSM框架实现了支付宝支付功能的完整源代码......
  10. HDU1427 速算24点
  11. FIO压测-SSDvsHDD
  12. mysql 关于 不可重复读与幻读的解决方案
  13. 公司内网限制qq微信登陆--解决办法
  14. gcc编译部分编译选项
  15. 【NOI2008】 赛程安排
  16. 凌波微步 出与洛神赋
  17. 智能代还行业怎么样?合法吗?代还APP开发靠谱吗?
  18. BFC、文档流、脱离文档流
  19. 如何在网页上添加支付宝链接
  20. 计算机网络信息的获取教学反思,《浏览因特网》教学反思

热门文章

  1. 全角英文和半角英文切换
  2. Mac上搭建Flutter开发环境(Android模拟器和IOS模拟器开发)
  3. 学习C++这几个网站足矣
  4. python简单实现抓取英雄联盟皮肤原画:老玩家都哭了!
  5. 10.2 Python 类和对象
  6. 怎样在Mac上查看已保存的iPhone Wi-Fi密码?
  7. 自媒体到底挣不挣钱?千万别错过了
  8. 首席数据官:数据管理的7大定律!
  9. 【论文精读】Improving Extreme Low-Light Image Denoising via Residual Learning
  10. 模型如何压缩?使用轻量化的模型压缩技术剪枝(pruning)