我的系统运行的是 Ubuntu 16.04 LTS。
我好像在两个地方安装了Qt。/usr
出于当时看来合理的原因,4.8.7 安装在我的主目录中,5.5.1 安装在我的主目录中。
$ /usr/bin/qmake -v
QMake version 2.01a
Using Qt version 4.8.7 in /usr/lib/x86_64-linux-gnu
$ ~/Qt/5.5/gcc_64/bin/qmake -v
QMake version 3.0
Using Qt version 5.5.1 in /home/jsd/Qt/5.5/gcc_64/lib
$ which qmake
/usr/bin/qmake
Qt Creator 看到主目录版本并认为它运行的是 5.5.1,但是当它qmake
在构建过程中运行时,它运行的是 4.8.7 版本,并且出现了一些小麻烦。
我该如何清理这个?另外,Qt安装在我的主目录下正常吗?
编辑:出现此问题的原因是 Qt Creator 忽略CONFIG += c++14
并拒绝允许 C++14 语法,例如auto foo = [](const a, const b){return a<b;};
使用 Clang 3.7 进行编译时,它应该支持 C++14。qmake
仅从 5.4 开始支持CONFIG += c++14
,因此我认为问题出在我的旧qmake
版本上。
答案1
Qt5 安装在您的本地目录中,因为您没有以 root 或 admin 身份安装它。
无论您设置路径、.bashrc、.cshrc、.zshrc、.profile 等,系统文件都优先于您的文件。
修改您的 PATH,以便系统首先找到您本地的 QT5 副本。
export PATH=$USER/Qt:${PATH}
答案2
我找到了解决方案:
- 通过包管理器删除 Qt4
- 通过包管理器安装 Qt5
- 从主文件夹中删除 Qt
- qt创建者仍然
CONFIG += C++14
使用 Clang 编译时忽略(╯°□°)╯︵ ┻⁄┻ - 编辑
usr/lib/x64_84-linux-gnu/qt5/mkspecs/features/c++14.prf
并注释掉仅适用-std=c++1y
于 Clang 3.2 及更高版本的防护(尽管仅安装了 Clang 3.7,但似乎仍适用)
修改后的c++14.prf
文件:
intel_icc {
# ICC does not support C++14 yet
} else: clang {
# # Clang has supported -std=c++1y since version 3.2
# greaterThan(QT_CLANG_MAJOR_VERSION, 3)|greaterThan(QT_CLANG_MINOR_VERSION, 1): \
QMAKE_CXXFLAGS_CXX11 = -std=c++14
# # Unknown how long Apple Clang has supported -std=c++1y, but at least since XCode 5.0
# greaterThan(QT_APPLE_CLANG_MAJOR_VERSION, 4): \
# QMAKE_CXXFLAGS_CXX11 = -std=c++1y
} else: gcc {
# GCC has supported -std=c++1y since 4.8
greaterThan(QT_GCC_MAJOR_VERSION, 4)|greaterThan(QT_GCC_MINOR_VERSION, 7): \
QMAKE_CXXFLAGS_CXX11 = -std=c++1y
}
# Delegate to c++11.prf
include(c++11.prf)