我在 macOS Sierra 10.12 上使用 Qt 5.6 和 Qt Creator 4.3。
我正在构建一个使用 OpenGL 和 OpenCL 的基于 Qt 的应用程序。
某个地方的软件或系统更新似乎破坏了 Qt Creator 查找 OpenGL 和 OpenCL 标头的能力。
我尝试过重新安装 Qt、重新安装 Xcode 和 Mac SDK,但这些选项都不起作用。
奇怪的是我的应用程序编译了。 QtCreator 只是无法找到标题本身 - 这使得代码导航更加复杂。
让我们以 OpenCL 为例。我这样包含它:
#ifdef __APPLE__
#include <OpenCL/cl.h>
#include <OpenCL/opencl.h>
#endif
我的 qmake app.pro 文件包含以下内容:
macx:QMAKE_LFLAGS += -framework OpenCL
这样似乎就可以编译了。然而,QtCreator 中上面的两个 OpenCL #include 带有黄色下划线,并带有工具提示“OpenCL/cl.h:没有这样的文件或目录”。
现在我可以看到它编译成功,因为 qmake 正在计算框架的位置并成功附加路径:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -stdlib=libc++ -g -std=gnu++11 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/Users/me/Projects/app -I. -I/Users/me/Qt5.6.2/5.6/clang_64/lib/QtWidgets.framework/Headers -I/Users/me/Qt5.6.2/5.6/clang_64/lib/QtGui.framework/Headers -I/Users/me/Qt5.6.2/5.6/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I/Users/me/Qt5.6.2/5.6/clang_64/mkspecs/macx-clang -F/Users/me/Qt5.6.2/5.6/clang_64/lib -o main.o /Users/me/Projects/app/main.cpp
现在,如果我导航到以下目录,标题就会出现:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A
所以我看不到缺少什么。
我尝试通过以下组合来“教授”Qt Creator 有关此框架目录的信息,但我还没有找到可行的方法:
macx:QMAKE_LFLAGS += -framework OpenCL
macx:INCLUDEPATH += /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A/Headers
macx:QMAKE_LFLAGS += -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks
macx:LIBS += -framework OpenCL
我正在努力寻找有关 QtCreator 如何在 Mac 上查找系统框架以及如何让它再次开始查找它们的信息。任何帮助将不胜感激。
对于任何有同样问题的人来说,最终答案实际上相当简单。
当您在 Qt Creator 中设置该套件时(它告诉它要使用什么编译器和调试器),您需要小心使用的编译器。我的机器上有两份 clang 副本,一份安装在 /usr/bin (系统副本)中,另一份安装在 XCode 应用程序包内。我的套件使用的是已安装的 Xcode,因为那是库所在的位置。虽然编译得很好,但 Qt 创建者由于某种原因没有正确连接库的路径。只需将其切换为使用 /usr/bin 中的即可解决问题。
请注意,我没有明确要求它使用 Xcode 应用程序包中的应用程序包,这只是在 Qt 创建器中首次打开项目时自动选择的应用程序包。因此,您可能必须调整其默认行为才能解决问题。
我知道这已经太晚了,无法帮助 OP,但对于遇到此问题的其他人,您可以通过转到 Build 目录并执行以下操作来强制 Qt Creator 识别最新的 Xcode:
rm -rf .qmake.stash
rm -rf .qmake.cache
例如,升级 Xcode 时可能会发生这种情况。
您可以通过显示 .PRO 文件中的内容来确认发生了什么:
QMAKE_CFLAGS += -showIncludes # Windows
QMAKE_CFLAGS += -H. # Mac
在编译输出中查找“-isysroot”。或者使用文本编辑器打开
.qmake.stash
。