OSX下奇怪的Qt包含目录结构
Posted
技术标签:
【中文标题】OSX下奇怪的Qt包含目录结构【英文标题】:Strange Qt include dir structure under OSX 【发布时间】:2016-05-28 10:08:13 【问题描述】:我正在试验 Qt 头文件(用于 vim 的 clang-complete
插件)。
为此,我正在尝试编译一个简单的 qt 函数(注意:这不应该工作,只是试图编译它)。
#include <QWidget>
int main(int, char**)
QWidget* a;
我用编译
clang try.cpp -o try -DQT_GUI_LIB -DQT_WIDGETS_LIB -isystem/Applications/Qt/5.6/clang_64/lib/QtCore.framework/Headers -isystem/Applications/Qt/5.6/clang_64/./mkspecs/macx-clang -isystem/Applications/Qt/5.6/clang_64/lib/QtGui.framework/Headers -isystem/Applications/Qt/5.6/clang_64/lib/QtWidgets.framework/Headers
并得到错误
In file included from /Applications/Qt/5.6/clang_64/lib/QtWidgets.framework/Headers/QWidget:1:
/Applications/Qt/5.6/clang_64/lib/QtWidgets.framework/Headers/qwidget.h:37:10: fatal error:
'QtGui/qwindowdefs.h' file not found
#include <QtGui/qwindowdefs.h>
这是因为 QWidgets 标头包含 #include <QtGui/...>
。例如,在 Linux 安装中这是可以的,因为文件夹是按该顺序设置的。但在 OSX 中,文件夹具有不同的结构。每个模块的标头都在 Qt<Module>.framework/Headers/...
内,而不是 Qt<Module>/
如果来自 Qt 的 .h 显然不适合这个文件夹结构,我该怎么告诉编译器包含在哪里,使用这个文件夹结构?
【问题讨论】:
您尝试设置路径吗? @SibiCoder 路径到哪里?问题是它找不到QtGui/qwindowdefs.h
,因为它在 Qt 文件夹中的结构不是这样
【参考方案1】:
如-manatttta 所示,Qmake 规范“macx-clang”不公开标题文件夹,例如<QtCore/*.h>
,与 Unix 和 Windows 配置一样,因为它使用 Xcode 框架架构:例如<QtCore.framework/*.h>
。
您可以创建一个别名(符号链接),将 QtCore.framework/headers 映射到 QtCore。请务必删除任何现有的 Qt 生成的 Makefile(s),以便后续构建将使用适当的包含路径生成。 以下是一些配置示例:
cd <MyApp>/include
mkdir -p MacOSX/Qt/headers
cd MacOSX/Qt/headers
QT_CORE_HEADERS=<your Qt path up to verson subdirectory>/clang_64/lib/QtCore.framework/Versions/5/Headers
ln -s $QT_CORE_HEADERS QtCore
Delete existing Makefile `rm -f <MyApp>/Build/Makefile`
【讨论】:
以上是关于OSX下奇怪的Qt包含目录结构的主要内容,如果未能解决你的问题,请参考以下文章