如何将Objective 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操作系统库都是用Objective C.编写的
在/Mac/projectDef.make文件中,我添加了Cocoa Framework和Foundation Framework,正如这里和我在互联网上找到的其他资源中所建议的那样:
target_link_libraries(${PROJECT_NAME}
${PLUGIN_INTERNAL_DEPS}
${Cocoa.framework} # added line
${Foundation.framework} # added line
)
我重新运行prepmac.sh,期望用我的.mm文件和.m文件在XCode中创建一个新项目;然而,他们似乎被忽视了。我只看到.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编译Objective C代码?请记住,我对此有点陌生,所以如果你留下详细的答案,而不是firebreath标签中常见的模糊的一句话,我将不胜感激。我只是有点不知所措,但如果你能让我通过这个障碍,我相信我会很好地从那里开始。
更新:
我编辑了projects/MyPlugin/CMakeLists.txt,并在那里添加了.m和.mm规则。运行prepmac.sh后,这些文件包含在项目中,但我仍然会遇到同样的编译错误。
我将所有.h文件和.mm文件从Obj C代码移到了MyPlugin根文件夹中,并重新运行了prepmac.sh文件。问题仍然存在。同样的编译错误。
您的问题是,C++文件包含了.h文件,这些文件具有目标C类型和/或包含在这些文件中。为了完成您想要的操作,c++使用的所有类都需要将所有与obj c相关的内容保留在#ifdef中,或者干脆不在头文件中公开任何obj c。
例如,您可以在标题中使用以下ifdef:
#ifdef __OBJC__
// Objective C / C++ code here
#endif
重要的是要记住,.h文件是include以及头文件,所以它们实际上是包含的。如果在.cpp文件中包含目标c代码,编译器会感到困惑并哭泣。
编辑:需要记住的最重要的一点是,您需要确保cpp文件中不包括任何目标c头文件(或其他带有目标c代码的文件)。如果你能那样做,你会没事的。
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 如何在Firebreath插件框架中使用基于Java的项目
- 如何将Objective C代码添加到FireBreath项目中
- 在Firebreath项目中使用IBPP时发生LNK2019错误
- 不显示Firebreath项目更改