首页 > 编程知识 正文

deepin系统,deepin20.6

时间:2023-05-05 18:17:52 阅读:260737 作者:1690

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

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

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

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

dtk_build.prfdtk_cmake.prfdtk_qmake.prfdtk_module.prfdtk_translation.prfdtk_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 -ldtkwidgetelse:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../../src/debug -ldtkwidgetdelse:unix: LIBS += -L$$OUT_PWD/../../../src -ldtkwidgetINCLUDEPATH += $$PWD/../../../srcINCLUDEPATH += $$PWD/../../../src/widgetsINCLUDEPATH += $$PWD/../../../src/utilDEPENDPATH += $$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/DWidgetDEPENDPATH += $$PWD/../../../../libdtk/dtkcore/include/libdtk-5.4.0/DWidgetunix:!macx: PRE_TARGETDEPS += $$PWD/../../../../libdtk/dtkcore/lib/libdtkwidget.aunix:!macx: PRE_TARGETDEPS += $$PWD/../../../../libdtk/dtkcore/lib/libdtkgui.aunix:!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!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。