繁体   English   中英

如何将目标C代码添加到FireBreath项目中?

[英]How do I add Objective C code to a FireBreath Project?

我正在编写适用于Mac OS的浏览器插件,该插件将在状态栏中放置一个状态栏图标,用户可以使用该图标与浏览器插件进行交互。 我已经在XCode 4.4.1中成功构建了FireBreath 1.6项目,并且可以将其安装在浏览器中。 但是,FireBreath使用C ++,而Mac OS的大部分现有库都是用Objective C编写的。

在/Mac/projectDef.make文件中,我按照此处的建议以及在Internet上找到的其他资源中添加了Cocoa Framework和Foundation Framework:

target_link_libraries(${PROJECT_NAME}
    ${PLUGIN_INTERNAL_DEPS}
    ${Cocoa.framework} # added line
    ${Foundation.framework} # added line
)

我重新运行prepmac.sh,希望在XCode中使用.mm文件和.m文件创建一个新项目。 但是,似乎它们已被忽略。 我只看到.cpp和.h文件。 我在projectDef.make文件中添加了规则,但似乎没有什么不同:

file (GLOB PLATFORM RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
    Mac/[^.]*.cpp
    Mac/[^.]*.h
    Mac/[^.]*.m    #added by me
    Mac/[^.]*.mm   #added by me
    Mac/[^.]*.cmake
)

即使手动添加文件,也会出现一系列编译错误。 其中大约有20个,都与NSObjRuntime.h文件有关:

Parse Issue - Expected unqualified-id
Parse Issue - Unknown type name 'NSString'
Semantic Issue - Use of undeclared identifier 'NSString'
Parse Issue - Unknown type name 'NSString'
...
...
Semantic Issue - Use of undeclared identifier 'aSelectorName'
...
...
Semantic Issue - Use of undeclared identifier 'aClassName'
...

它会像这样继续一段时间并出现类似的错误...

从我阅读的内容来看,这些错误的出现是由于对Foundation Framework的依赖,我相信我已经将其包含在项目中。 我也尝试单击XCode中的项目

现在到了我不确定下一步该怎么做的地步。 人们说在C / C ++代码中使用Objective C并不难,但是XCode和Objective C的新手可能会加剧我的困惑。 在这个新平台上,这只是我的第四天。

我需要怎么做才能使XCode编译目标C代码? 请记住,我对此还有些陌生,因此,如果您留下详细的答案,而不是在标签中常见的模糊单线,我将不胜感激。 我的想法只是一点点,但是如果您能使我克服这个障碍,我敢肯定,从那里出发我会很好。

更新:

我编辑了project / MyPlugin / CMakeLists.txt文件,并在其中添加了.m和.mm规则。 运行prepmac.sh之后,文件包含在项目中,但是我仍然遇到相同的编译错误。

我将所有.h文件和.mm文件从Obj C代码移至MyPlugin根文件夹,然后重新运行prepmac.sh文件。 问题仍然存在。 相同的编译错误。

您的问题是您拥有.h文件,这些文件被具有目标c类型和/或包含在其中的c ++文件包含。 为了做您想做的事情,c ++使用的所有类都需要将所有与obj c相关的东西保留在#ifdef中,或者干脆不在头文件中公开任何obj c。

例如,可以在标头中使用以下ifdef:

#ifdef __OBJC__
     // Objective C / C++ code here
#endif

重要的是要记住,.h文件是包括和头文件,所以其实包括很重要的。 如果在.cpp文件中包含目标c代码,则编译器会感到困惑和哭泣。


编辑:要记住的最重要的事情是,您需要确保cpp文件中不包含任何目标c头文件(或其他具有目标c代码的文件)。 如果可以的话,您会没事的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM