我正在为 Mac OS 编写一个浏览器插件,它将在状态栏中放置一个状态栏图标,用户可以使用它来与浏览器插件交互。我已经在 XCode 4.4.1 中成功构建了一个 FireBreath 1.6 项目,并且可以在浏览器中安装它。然而,FireBreath 使用 C++,而大多数现有的 Mac OS 库都是用 Objective C 编写的。
在 /Mac/projectDef.make 文件中,我添加了 Cocoa 框架和 Foundation 框架,正如这里和我在 Internet 上找到的其他资源中所建议的那样:
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个左右,都和fileNSObjRuntime.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 不熟悉可能会导致我的困惑。这只是我在这个新平台上的第 4 天。
我需要做什么才能让 XCode 编译 Objective C 代码?请记住,我对此有点陌生,所以如果您留下详细的答案,而不是firebreath标签中常见的模糊单行字,我将不胜感激。我只是有点过头了,但如果你能让我越过这个障碍,我相信我会很好地从那里开始。
更新:
我编辑了 projects/MyPlugin/CMakeLists.txt 并在那里添加了 .m 和 .mm 规则。运行 prepmac.sh 后,文件包含在项目中,但我仍然得到相同的编译错误。
我将所有 .h 文件和 .mm 文件从 Obj C 代码移动到 MyPlugin 根文件夹并重新运行 prepmac.sh 文件。问题依然存在。同样的编译错误。