解决使用cmake搜索QT包时冲突的问题
2018-03-29 08:54
513 查看
场景
当编译软件使用了外部库,事先并不知道它的头文件和链接库的位置,使用cmke中的find_package(< Name >)命令会在模块路径中寻找 Find< name >.cmake,这是一种快速查找库的方法。具体用法如下, 即可实现在使用cmake快速查找到Qt5.5.0的Widgets与Core 包:... #打开Qt的MOC功能和UI文件处理功能 set(CMAKE_AUTOMOC on) set(CMAKE_AUTOUIC on) set(CMAKE_AUTORCC on) add_definitions(-DQT_BOOTSTRAPPED) #查找Qt的库 find_package(Qt5 5.5.0 REQUIRED Widgets Core) add_executable(text ${SOURCE_FILES}) qt5_use_modules(text Widgets Core)
问题
但当Linux系统下存在两个QT包且版本号相同都为5.5.0,只是一个包用于交叉编译使用(Qt5.5.0-arm),其中一个用于Linux桌面开发应用(Qt5.5.0),此时将可能出现find_package无法正确查找到对应QT的情况(注:也可能是我不懂对应的find_package使用方法,如果有知道的望告诉,Thanks♪(・ω・)ノ)脚本
我通过一个脚本,使用切换软连接的方法,例如当需要使用当Qt5.5.0-arm包时,删除/usr/local路径下的Qt5.5.0的软连接,并重新生成一个Qt5.5.0-arm的软连接,使find_package可以正确查找到需要的QT包。该脚本中使用到了getopt,具体用法可以参考:https://www.cnblogs.com/yxzfscg/p/5338775.html
root@ubuntu:/bin# cat qtswitch
#!/bin/bash #当前系统存在两种不同平台使用的QT包 #当cmake使用find_package方法查询包时可能会混淆 #该脚步用于解决QT包的链接关系 function switchHelp() { echo -e "\nUsage: qtswitch [options]\n" \ "\nOptions:\n" \ " -a, --arm switch ARCH = arm\n" \ " -x, --x86 switch ARCH = x86\n" \ " -w, --whole switch ARCH = arm | x86\n" } if [ `whoami` != "root" ]; then echo -e "权限不够" exit 1 fi if [ $# -lt 1 ]; then switchHelp exit 1 fi #-o表示短选项, --long表示长选项, -n:出错时的信息 --:错误的选项字符串 TEMP=`getopt -o axw --long arm,x86,whole -- "$@"` if [ $? != 0 ]; then echo "Terminating..." >&2 ; exit 1 fi #set 会重新排列参数的顺序,也就是改变$1,$2...$n的值,这些值在getopt中重新排列过了 eval set -- "$TEMP" while true; do case "$1" in -a | --arm) #先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出, #由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静悄悄: rm /usr/local/qt5.5.0 >/dev/null 2>&1 ln -s /opt/Qt5.5.0-arm /usr/local/qt5.5.0-arm >/dev/null 2>&1 echo -e "...\nuse arm success!" shift;; -x | --x86) rm /usr/local/qt5.5.0-arm >/dev/null 2>&1 ln -s /opt/Qt5.5.0/5.5/gcc_64 /usr/local/qt5.5.0 >/dev/null 2>&1 echo -e "...\nuse x86 success!" shift;; -w | -whole) ln -s /opt/Qt5.5.0-arm /usr/local/qt5.5.0-arm >/dev/null 2>&1 ln -s /opt/Qt5.5.0/5.5/gcc_64 /usr/local/qt5.5.0 >/dev/null 2>&1 echo -e "...\nuse arm | x86 success!" shift;; --) shift break;; ?) switchHelp exit 1;; esac done
使用
当需要切换Qt5.5.0时:相关文章推荐
- 还为使用google搜索找不到自己要的技术文章吗?彻底解决访问google域名地址搜索网站间歇访问无法找到服务器的问题
- Spring3.0.2 使用 Annotation 与 @Transactional 冲突问题解决方案
- 解决ext与ueditor同时使用,引入js文件冲突问题
- 一步步 jQuery (一)概念,使用,$名称冲突4种解决方法,使用层次及次数问题
- Ubuntu qt 使用opencv库出现undefined reference问题解决
- Qt 4使用MySQL的中文问题解决方法
- 解决6410使用7寸液晶屏,第一次进入Qt2.2无法使用触摸笔的问题
- 使用国内源解决Qt在线更新慢的问题
- 解决错误Unknown CMake command "QT4_WRAP_CPP"(CMAKE对应Qt在Linux/Windows兼容问题)
- windows中使用CMake和Eclipse开发Qt程序遇到的问题
- 使用Dhcpstarv解决DHCP服务器冲突问题
- weblogic 12c下使用hadoop时jar包冲突的两个问题的解决办法
- 解决Tslib移植之后自己编写的QT程序不能使用触屏的问题
- 解决使用SearchView和Filter时出现搜索词悬浮窗问题
- 使用Qt Visual Studio Add-in 实现中文ts文件,解决中文乱码问题
- 导入extjs、jquery 文件时$使用冲突问题解决方法
- 解决在使用vs2003全项目搜索时应用程序未响应问题
- 使用python搭建Django应用程序步骤及版本冲突问题解决
- 如何解决飞思卡尔芯片使用监控程序产生的冲突问题
- 解决windows无法使用系统搜索功能的问题