背景:
今天在配置Jetson上的demo环境时卡在Qt版本的选择上。系统Ubuntu18.04上依次安装了Qt5.9.8和Qt4.8.6,demo环境需要Qt4,始终找不到Qt4。
经过:
在分析了demo环境配置makefile发现是通过find_package(Qt4 REQUIRED)来查找Qt4。查找find_package资料,发现cmake通过FindQt4.cmake来查找Qt4,分析FindQt4.cmake没有找到有用信息(内容太多没有仔细看看),调查中断。由于通过Qmake -v命令查看Qt版本(显示为Qt5),因此转向分析Qmake,发现在/usr/bin中的qmake实际指向qtchooser,通过qtchooser -print-env发现QTLIBDIR="/usr/lib/aarch64-linux-gnu/qt4/bin",已经指向了Qt4,此时非常不解。
中午吃完饭后,突然灵光一闪,以前在windows上配置Qt时经常用到的环境变量QTDIR在哪?通过echo $QTDIR 发现指向的是Qt5所在路径,百度找了下QTDIR的修改方法,抱着试一试的想法修改QTDIR为Qt4的路径,再用Qmake -v发现已经切换到Qt4,问题解决。另外,通过分析/etc/profile发现,Qt的其他环境变量是通过QTDIR来设置的。
export QTDIR=/usr/local/qt-4.8.6
export PATH=$QTDIR/bin:$PATH
export MANPATH=$QTDIR/man:$MANPATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
结论:
Qt最重要的环境变量为QTDIR!
另外,ubuntu环境变量修改方法,参考以下文章,非常全面:
ubuntu环境变量的三种设置方法
https://www.cnblogs.com/jpfss/p/11107080.html
ps:下午继续研究FindQt4.cmake,发现环境只认/usr/bin/qmake,而这个qmake只是qtchooser的一个软连接,qtchooser的配置在/usr/lib/aarch64-linux-gnu/qt-default/qtchooser/default.conf,这个default.conf又是指向../../../../share/qtchooser/qt4-aarch64-linux-gnu.con软连接,而实际内容如下:
/usr/bin
/usr/lib/aarch64-linux-gnu/qt4/bin
/usr/lib/aarch64-linux-gnu
第一个地址正是/usr/bin,因此在使用 qmake -query QT_VERSION 查询QT版本时无法退出(陷入死循环)。
目前的方法是在/usr/share/qtchooser/创建一个类似qt4-aarch64-linux-gnu.conf的新文件,新文件内容有两行,第一行为qt4的bin路径(/usr/local/qt-4.8.6/bin),第二行为qt4的lib路径(/usr/local/qt-4.8.6/lib)。修改/usr/lib/aarch64-linux-gnu/qt-default/qtchooser/default.conf软连接到新文件。执行qmake -query QT_VERSION输出4.8.6,OK。