1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00
LibQQt/wiki/HowtoBuildLibQQt.md
2018-01-23 19:43:38 +08:00

4.7 KiB
Raw Blame History

这块要说的特别多。为什么呢?因为这块的工作很多,必须设计合理才会容易编译。 这里必须提一下Multi Link技术是这个技术帮助使用者利用qmake这款工程管理工具来进行多个增删link-library。全称Multi-link technology“多链接”技术专门解决这些个app链接library出现的手工解决太多困难的问题。 先说说:

我遇到的问题

  1. 我的工程在自己电脑上编译很顺利,到了别的电脑上却需要经过非常大量的配置才能完成编译。
  2. 我的工程我自己开发修改很容易,编译也很容易,可是和别人一起合作开发之后,修改却变得很困难,需要处理过多的冲突。
  3. 工程配置工作竟然那么巨大数量,几天的功夫连一个工程都配置不完。
  4. 工程管理概念太复杂,我不爱看。

这些我想读者都遇到过,我也遇到过,总是被这种路径那种路径困扰,总是被这个编译选项那个编译设置困扰。 说说我是怎么解决的:

解决方法

这里不做每一条的解说,这里做一个可行性的设计方案。 Qt是跨平台的library解决方案虽然存在某些bug和不足但不能掩盖它的确在跨平台解决方案中独占头席无出其右。

  • 开始一个工程之前设置Qt Creator的默认编译目录在设置-构建-概要 里面基于Qt4的版本没有这个设置那个建议不要使用。
    • %{JS: Util.asciify("/your/local/path/to/build/root/%{CurrentProject:Name}/%{Qt:Version}/%{CurrentKit:FileSystemName}/%{CurrentBuild:Name}")}
    • %{CurrentProject:Name} 代表当前工程的名字
    • %{Qt:Version} Qt的版本号
    • %{CurrentKit:FileSystemName} 目标系统名称这个在设置Qt Kit的时候会要求设置这里也要求设置设置为和qqt_qkit.pri里面定义的不同的SYSNAME变量的值相同生成的时候要用链接的时候要用发布拷贝库的时候也要用还是设置成一样的吧。
    • %{CurrentBuild:Name} Debug还是Release

这样出来的结果是 /..buildstation/QQt/5.9.2/macOS/Debug 我的编译目标就在这里拷贝SDK的时候也在这里拷贝而且拷贝的目的地址也是这个样子。 这样管理起来是不是很费劲,手动拷贝得走进多少目录? 的确是这样的多层多个目录MLMA技术就是解决这个问题。

  • 设置QKIT环境变量Qt的build配置当中提供设置环境变量的位置

有的读者疑惑这里的设置也好多啊。的确的确好多但是这个多根本不多如果把那些拷贝不同目标系统的librayr的工作全部手动操作那样加起来才算多基本上开发一个平台的工作要复制N个平台份。 我一般只设置Debug里的Release里的一般就不设置了。 %{CurrentKit:FileSystemName} 我表示Qt Creator的这个变量在qmake pro文件中还无法获取。等着吧等着Qt开发组有空了把这个变量加入qmake连QKIT这个环境变量也不用设置了。

  • 运行qmake编译终端输出所需的变量信息根据提示还是再Qt Creator中打开相应的app_configure.pri进行修改添加这几个变量。这个变量有三个。
    • QQT_BUILD_ROOT 这个代表工程编译的根路径基本上所有的Qt工程编译都在这个根路径当中QQt也不例外。
    • QQT_SDK_ROOT 这个代表QQt library将要导出SDK的根目录位置基本上所有的library SDK都会导出到那里这样做是有好处的你想想所有的library都在一个地方被链接是不是管理起来更容易。在我的电脑上所有不论是哪家开发的library都放在了b0-product/lib里面。QQt依赖MLMA技术自动拷贝过去。
    • APP_DEPLOY_ROOT 这个变量可选

MLMA技术会制作一套pri能够自动生成一些lib_.pri和app_.pri用户对其进行完成以制作出library和app。MLMA会自动的进行多个library编译、多个app编译链接library发布SDK到指定位置发布app到指定位置等工作。提供很多易用函数方便用户使用qmake工作。

现在版本的MLMA技术和QQt捆绑在一起还未实现分离。经过以上设置编译出App应该没有多大问题。QQt工程我已经制作加调试了两年有余运行质量还是有保证的。配套完善的MLMA技术在跨平台开发的场合更加容易使用。

在User新开发的App当中使用QQt不需要拷贝pri只要include app_configure.pri就可以了如果有需要还可以include app_deploy.pri完成app发布工作。

另外我再单独写一篇文章介绍Multi Link技术说说这个技术的特点和包含有哪些功能丰富的pri。

#注释

链接方法在v2.1.6就更新了,细节请参照博客。(参照首页链接)