2017-07-27 5 views
0

Ich verwende Qt 5.6 mit Qt Creator 4.3 auf MacOS Sierra 10.12.Qt Creator nicht sehen Mac Frameworks

Ich baue eine Qt-basierte Anwendung, die OpenGL und OpenCL verwendet.

Irgendwo scheinen Software- oder Systemupdates die Fähigkeit von Qt Creators, die Header für OpenGL- und OpenCL-Header zu finden, nicht zu lösen.

Ich habe versucht, Qt neu zu installieren, Xcode und das Mac SDK neu zu installieren, und keine dieser Optionen macht es funktioniert.

Die seltsame Sache ist meine App kompiliert. QtCreator kann die Header selbst nicht finden - das macht die Code-Navigation etwas komplexer.

So nehmen wir OpenCL. Ich schließe es wie folgt aus:

#ifdef __APPLE__ 
#include <OpenCL/cl.h> 
#include <OpenCL/opencl.h> 
#endif 

Meine app.pro Datei für qmake folgende Inneren hat:

macx:QMAKE_LFLAGS += -framework OpenCL 

Und damit scheint es zu kompilieren. Die beiden obigen OpenCL # -Include in QtCreator sind jedoch gelb unterstrichen mit einer QuickInfo "OpenCL/cl.h: No solche Datei oder Verzeichnis".

Jetzt kann ich sehen, dass es erfolgreich kompiliert als Qmake arbeitet, wo die Gerüste und die Pfade anhängt erfolgreich:

/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 

Nun, wenn ich in das folgende Verzeichnis navigieren die Header sind und Gegenwart:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A

So kann ich nicht sehen, was fehlt.

Ich habe mit Kombinationen der folgenden über dieses Framework-Verzeichnis zu „lehrt“ Qt Creator versucht, aber ich habe etwas gefunden, das funktioniert:

Informationen über finden
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 

Ich kämpfe wie QtCreator findet Das System Frameworks auf einem Mac und wie ich es bekomme, um sie wieder zu finden. Jede Hilfe würde massiv geschätzt werden.

Antwort

0

Für jeden, der das gleiche Problem hat, war die Antwort am Ende ziemlich einfach.

Wenn Sie das Kit in Qt Creator einrichten (was sagt, was Compiler und Debugger unter anderem zu verwenden), müssen Sie vorsichtig mit dem verwendeten Compiler sein. Ich hatte zwei Kopien von clang auf meinem Rechner, eines war in/usr/bin (das System) installiert und das andere war im XCode-App-Paket installiert. Mein Kit verwendete den Xcode, der installiert wurde, da die Bibliotheken dort leben. Während dies kompiliert einfach, Qt Creator aus irgendeinem Grund nicht die Pfade zu Bibliotheken richtig anschließen. Wenn Sie dies einfach auf den Eintrag in/usr/bin umstellen, haben Sie es gelöst.

Beachten Sie, dass ich nicht explizit gebeten habe, das im Xcode-App-Paket zu verwenden, das ist genau das, das beim ersten Öffnen des Projekts in Qt Creator automatisch ausgewählt wurde. Daher müssen Sie möglicherweise das Standardverhalten anpassen, um die Fehler zu beheben.