Mac OS X上第三方框架中的头文件

3

我正在Qt中使用Sparkle框架。我已经将以下内容添加到我的.pro文件中:

LIBS += -framework Sparkle
QMAKE_CXX_FLAGS += -F/path/to/the/directory/sparkle.framework/is/in

然而,我遇到了编译错误,提示无法找到“Sparkle/Sparkle.h”。框架头文件实际上驻留在MyFramework.framework/Headers/*.h中,并且像MyFramework/*.h一样包含。

我需要添加哪些命令才能正确地将Sparkle框架头文件包含到我的.pro文件中?


我将框架复制到/System/Library/Frameworks中,编译成功了。但是我仍然无法链接它。 - Roland Rabien
2个回答

2
问题出在我使用了QMAKE_CXXFLAGS,我需要使用QMAKE_CFLAGS,让编译器包含头文件。

我相信这是QMAKE_LFLAGS,参考来源:http://qt-project.org/doc/qt-5.0/qtdoc/qmake-platform-notes.html - stepanbujnak

0
你可以在.pro文件中使用INCLUDEPATH。文档中指出,这个变量用于指定编译项目时应搜索的#include目录。使用";"或空格作为目录分隔符。因此,在你的情况下,它将是这样的。
INCLUDEPATH = MyFramework.framework/Headers

在哪里

MyFramework.framework/Headers是头文件的物理位置

我从来没有习惯过MAC OS,但仍然希望它有所帮助。

编辑:

如果您想包含像FrameWorkName/HeaderFile.h这样的文件,您可以停止指定到所需的文件夹。

例如,

如果home/CommonFolder/FrameWorkName/HeaderFile.h是您的头文件的物理位置,则可以将INCLUDEPATH指定为

INCLUDEPATH = home/CommonFolder

现在在你的.cpp文件中,你可以像这样写:#include "框架名称/头文件.h"


不,这样行不通,因为你应该包含 FrameworkName/someheader.h,而不是直接包含 someheader.h - Jake Petroules
你有什么特别的原因不想直接包含头文件,而是像 FrameworkName/someheader.h 这样包含吗? - liaK
1
是的,这就是你应该包含所有框架头文件的方式,而该框架内部的头文件中有 #include <Framework/otherheader.h>,因此必须按照这种方式进行。对于位于 /Library/Frameworks 中的框架似乎可以自动工作,但在其他任何地方都会出现问题... - Jake Petroules

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