奇怪的Qt包括OSX下的目录结构

时间:2016-05-28 10:08:13

标签: c++ macos qt vim

我正在尝试使用Qt标头(用于使用vim' s 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显然对于此文件夹结构是错误的,我该如何告诉编译器包含的位置?

1 个答案:

答案 0 :(得分:1)

如 - manatttta所示,Qmake spec'maxx-clang'不会公开标题文件夹,例如{1}},如在Unix和Windows配置中,因为它使用Xcode框架架构:例如<QtCore/*.h>

您可以创建一个别名(符号链接)将QtCore.framework / headers映射到QtCore。请务必删除任何现有的Qt生成的Makefile,以便后续构建将使用适当的包含路径生成。 以下是一些配置示例步骤:

<QtCore.framework/*.h>