Qt的目录依赖问题----怎样生成一个绿色的Qt软件包
Qt的目录依赖问题----怎样生成一个绿色的Qt软件包
一、核心问题:
如果将编译好的Qt文件拷贝到任何目录下,作为一个绿色软件库来使用?
二、原理讨论
由于Qt在编译的时候将安装路径硬编码到了库文件中,这个问题似乎不太好解决。使用如下命令,可以查看到底有哪些路径:
qmake -query
可得到类似的如下结果:
QT_INSTALL_PREFIX:/usr/lib/qt4
QT_INSTALL_DATA:/usr/lib/qt4
QT_INSTALL_DOCS:/usr/share/doc/qt4
QT_INSTALL_HEADERS:/usr/include
QT_INSTALL_LIBS:/usr/lib
QT_INSTALL_BINS:/usr/lib/qt4/bin
QT_INSTALL_PLUGINS:/usr/lib/qt4/plugins
QT_INSTALL_IMPORTS:/usr/lib/qt4/imports
QT_INSTALL_TRANSLATIONS:/usr/share/qt4/translations
QT_INSTALL_CONFIGURATION:/etc
QT_INSTALL_EXAMPLES:/usr/lib/qt4/examples
QT_INSTALL_DEMOS:/usr/lib/qt4/demos
QMAKE_MKSPECS:/usr/lib/qt4/mkspecs
QMAKE_VERSION:2.01a
QT_VERSION:4.7.4
幸运的是,在Qt4中引入了一个新的机制: qt.conf,于是,这个问题得以解决。这些路径都可以被覆盖。在assistant中查看qt.conf的帮助,可以了解qt.conf的大致写法。
[Paths]
Prefix = /some/path
Translations = i18n
如果你将上述qt.conf置于qmake所在的目录下会发生什么? qmake -query会告诉你答案
QT_INSTALL_PREFIX:/some/path
QT_INSTALL_DATA:/some/path
QT_INSTALL_DOCS:/some/path/doc
QT_INSTALL_HEADERS:/some/path/include
QT_INSTALL_LIBS:/some/path/lib
QT_INSTALL_BINS:/some/path/bin
QT_INSTALL_PLUGINS:/some/path/plugins
QT_INSTALL_IMPORTS:/some/path/imports
QT_INSTALL_TRANSLATIONS:/some/path/i18n
QT_INSTALL_CONFIGURATION:/some/path
QT_INSTALL_EXAMPLES:/some/path
QT_INSTALL_DEMOS:/some/path
QMAKE_MKSPECS:/some/path/mkspecs
QMAKE_VERSION:2.01a
QT_VERSION:4.8.2
于是,我们可以得到如下结论: 假如有一个qt.conf文件位于Qt可执行文件所有的目录下面,比如/usr/bin目录中,则这些可执行文件的搜索路径将被qt.conf中指定的路径所覆盖。 Prefix是关键,它指定了Qt的根目录,其它很多路径根据这个路径来指定 有一些路径会有一个默认值,比如lib,bin, 还有一些则没有,比如examples, demos
三、解决方案
鉴于此,下面给出一个可供参考的qt.conf模板
[Paths]
Prefix = /media/Disk/qt-everywhere-opensource-src-4.8.2
Translations = translations
Plugins = plugins
Imports = imports
Examples = examples
Demos = demos
剩下的问题是,每换一个地方,就要手动改一次,重复劳动实在有些不爽。下面提供两个分别针对Windows和Linux的脚本,编译完Qt之后,删掉最大的src目录,然后将此脚本置于根目录下即可。
Windows版本: updateQt.bat
::
:: this file should be placed in Qt root directory
:: eg. if qmake.exe is in C:\Qt\bin,
:: this script should be in C:\Qt
::
:: Reference:http://www.cuteqt.com/blog/?p=149
:: Reference:http://blog.csdn.net/jq0123/article/details/4325256
REM get current directory
REM and replace \ with /
SET PWD=%~dp0
SET CONF=%PWD%\bin\qt.conf
SET PWD=%PWD:\=/%
echo [Paths] >%CONF%
echo Prefix = %PWD% >>%CONF%
echo Translations = translations >>%CONF%
echo Examples = examples >>%CONF%
echo Demos = demos >>%CONF%
Linux版本: updateQt.sh
#!/bin/bash
function ScriptAbsolutePath() {
DIR=$(dirname `which $0`)
echo $DIR
}
Prefix=`ScriptAbsolutePath`
Translations=translations
Plugins=plugins
Imports=imports
Examples=examples
Demos=demos
CONF=$Prefix/bin/qt.conf
echo [Paths] >$CONF
echo Prefix = $Prefix >>$CONF
echo Translations = $Translations >>$CONF
echo Plugins = $Plugins >>$CONF
echo Imports = $Imports >>$CONF
echo Examples = $Examples >>$CONF
echo Demos = $Demos >>$CONF
四、总结
假如你编译了一个Qt库,那么你可以实施如下步骤:
- 删除src目录,里面都是一些源码和临时文件。你还可以删除其它一些无关的目录,但都不大,无伤大雅。
- 在根目录下编写脚本updateQt.bat或updateQt.sh,内容如下。
- 每次将整个目录拷到其它地方时,执行一下脚本。
- 将Qt的bin目录加到系统路径中去。这样,别的软件就能找到qmake,然后,它就能自动找到库文件(lib)和头文件(include)的位置。
然后,你就得到了一个近似于绿色的Qt发行版。每换一次地方只需要执行一下脚本哦。
注意:只针对Qt4,Qt3没这个机制。
http://www.ituring.com.cn/article/5485
Qt的目录依赖问题----怎样生成一个绿色的Qt软件包的更多相关文章
- 如何配置一个绿色化的 Qt for Windows 开发环境(有.bat脚本,亲测好用) good
安装 QtCreator for Windows 其实是很简单的,不过,我一向讨厌什么软件都得弄个安装程序,我希望我所安装的这个 Qt 可以是绿色的.便携的,如果无法实现,至少让这个 Qt 可以在新系 ...
- QT工程构建目录下,将生成的中间文件和可执行文件分离
在QT工程中,当我们选择了构建目录后,编译生成程序后,总会发现在debug目录下会有混淆着各类文件,如下图 很多时候,我们又仅仅只需要可执行文件或者自定义的动态链接库.如下图 当然,如果不觉得麻烦,有 ...
- 如何使用Maven的archetype快速生成一个新项目(解决生成项目目录不完整问题)
Maven的archetype Plugin可能大家都听过,但不一定都能很好地用好它.缺省地如果你使用 mvn archetype:generate 会从maven的Repository里查找所有支 ...
- 未能加载文件或程序集“BLL”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集。
今天使用VS2012创建项目的时候,考虑到项目中代码的重用性以及清晰简洁性,搭建了一个三层架构,但是在项目运行的时候,总是报错: “未能加载文件或程序集“BLL”或它的某一个依赖项.生成此程序集的运行 ...
- windows上的Qt 5的依赖部署打包
通常我们编译Qt程序的时候最终会生成exe或dll,这些可执行文件都会有Qt模块的依赖,如果项目一旦庞大,就不是很好看出缺了什么模块,导致安装包安装到其他绿色干净的windows机器上会提示缺少XXX ...
- Qt使用自带的windeployqt 生成exe来发布软件
集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:Qt Widgets Application 和 Qt Quick Application.下面分别介绍这两类exe ...
- 【转】Qt使用自带的windeployqt 生成exe来发布软件
集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:Qt Widgets Application 和 Qt Quick Application.下面分别介绍这两类exe ...
- VC生成的DLL给QT的EXE调用时lib路径问题小结
VC生成的DLL给QT调用,有两种方式,一种是隐式调用调用(使用.lib文件方式): ① 在*.pro工程文件中添加VC生成的lib文件路径时,或者使用一个绝对路径,如: LIBS += " ...
- Pytest单元测试框架:插件-allure-pytest环境搭建并在本地生成一个测试报告
之前写了allure-pytest的官方文档啃的内容,有些交流的朋友,实践起来没什么头绪,所以就有了这篇文章,也给自己填个坑 第一步:搭建Allure.JDK环境 1. 搭建JDK环境 不装jdk你会 ...
随机推荐
- ASP.NET listBbox控件用法
ListBox基本功能使用方法 2011-06-09 13:23:16| 分类: .NET/C# | 标签:listbox基本功能使用方法 |举报 |字号大中小 订阅 ListBox基 ...
- gulp脚本编写方法
建立一个gulpfile.js文件,内容直接抄gulp-htmlmin的readme: var gulp = require('gulp'); var htmlmin = require('gulp- ...
- Dictionary<string, string> 排序
.net framework 2.0 版 Dictionary<string, string> collection = new Dictionary<string, string& ...
- JS 操作日期
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...
- 优秀的 Android Studio 插件
转自:http://www.codeceo.com/article/8-android-studio-plugins.html Android Studio是目前Google官方设计的用于原生Andr ...
- mssql索引使用情况查询
可通过查询dm_db_index_usage_stats表取得对应表索引被使用次数. 列名 数据类型 说明 database_id smallint 在其中定义表或视图的数据库的 ID. object ...
- InitParam与ContextParm的异同
web.xml里面可以定义两种参数:(1)application范围内的参数,存放在servletcontext中,在web.xml中配置如下: xml 代码 <context-param> ...
- [置顶] .NET下枚举类型的Save和Load分析
今天在写代码的时候,心血来潮对原来的字符串保存状态位的方式很不满意,对于代码里出现了 state == "1" 这样的状态判断很是不爽.那么理想中的判断是怎样的呢?很简单如你所想枚 ...
- SGU 242 Student's Morning 网络流(水
题目链接:contest=0&problem=242">点击打开链接 题意: 给定n个人,m个终点 以下n行表示每一个人能够去m个点. 每一个人仅仅能去一个点. 输出随意一个方 ...
- 文件上传下载样式 --- bootstrap
在平时工作中,文件上传下载功能属于不可或缺的一部分.bootstrap前端样式框架也使用的比较多,现在根据bootstrap强大的样式模板,自定义一种文件下载的样式. 后续会使用spring MVC框 ...