Qt Creator,项目中的套件编译器被忽略了。

4

我正在使用macOS High Sierra (10.13.2)和Qt 5.10.0。我想在我的应用程序中使用OpenMP。

我已经在我的.pro文件中添加了以下标志:

QMAKE_CXXFLAGS += -fopenmp
QMAKE_LFLAGS += -fopenmp
LIBS += -fopenmp

macOS 上默认的编译器不包含 OpenMP。我通过 homebrew 安装了支持 OpenMP 的 gcc。
在 Qt Creator 的“构建和运行” > “编译器”选项卡下,我添加了 homebrew 的 g++ 和 gcc 编译器(/usr/local/Cellar/gcc/7.2.0/bin/{gcc-7,g++-7})。然后选择我正在使用的工具链,并将编译器更改为我在编译器选项卡中添加的 homebrew 安装的编译器。
如果我在设置这个工具链并重新构建项目后检查 Qt Creator 生成的 Makefile,我会发现 CC 和 CXX 并没有使用我指定的编译器。以下是它们在 Makefile 中的值:
CC            = /Library/Developer/CommandLineTools/usr/bin/clang
CXX           = /Library/Developer/CommandLineTools/usr/bin/clang++

这些应该是/usr/local/Cellar/gcc/7.2.0/bin/g++-7/usr/local/Cellar/gcc/7.2.0/bin/gcc-7。我现在得到的编译器输出为: 18:14:48:开始:"/usr/bin/make" /usr/local/Cellar/qt/5.10.0/bin/qmake -o Makefile ../Practice/Practice.pro -spec macx-g++ CONFIG+=debug CONFIG+=x86_64 CONFIG+=qml_debug /Library/Developer/CommandLineTools/usr/bin/g++ -c -pipe -fopenmp -g -std=gnu++11 -arch x86_64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.13.sdk -mmacosx-version-min=10.10 -Wall -W -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I../Practice -I. -I/usr/local/Cellar/qt/5.10.0/lib/QtQuick.framework/Headers -I/usr/local/Cellar/qt/5.10.0/lib/QtGui.framework/Headers -I/usr/local/Cellar/qt/5.10.0/lib/QtQml.framework/Headers -I/usr/local/Cellar/qt/5.10.0/lib/QtNetwork.framework/Headers -I/usr/local/Cellar/qt/5.10.0/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/AGL.framework/Headers -I/usr/local/Cellar/qt/5.10.0/mkspecs/macx-g++ -F/usr/local/Cellar/qt/5.10.0/lib -o main.o ../Practice/main.cpp clang: error: unsupported option '-fopenmp' make: *** [main.o] Error 1 18:14:49:进程"/usr/bin/make"以代码2退出。 在我的套件中为什么Qt Creator生成的Makefile没有使用我指定的编译器?

你能在不包含OpenMP的情况下编译它吗?我遇到了类似的问题。 - Skam
是的,即使不包括OpenMP,它也可以编译,但仍然使用了错误的编译器。 - K. Shores
1个回答

4

因为您使用的mkspec macx-g++ 将覆盖CC和CXX设置。作为临时解决方法,请尝试在pro文件中直接设置它们:

QMAKE_CC = /usr/local/Cellar/gcc/7.2.0/bin/gcc-7
QMAKE_CXX = /usr/local/Cellar/gcc/7.2.0/bin/g++-7

您可能希望编辑mkspec(或创建新的mkspec)以为您的工具集设置这些变量。

要查找mkspec文件(qmake.conf):

INSTALLDIR=`qmake -query QT_INSTALL_CONFIGURATION`
MKSPECNAME=`qmake -query QMAKE_SPEC`
cd $INSTALLDIR/mkspecs/$MKSPECNAME

关于为什么要设置两个编译器:Qt Creator旨在成为通用的C++ IDE,因此能够管理非Qt项目,这些项目不使用qmake但需要编译器。

谢谢。在我添加了 QMAKE_LINK = /usr/local/Cellar/gcc/7.2.0/bin/g++-7 之后,这个问题得到了解决。 - K. Shores

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接