在/Mac/projectDef.make文件中,我添加了Cocoa Framework和Foundation Framework,如建议here以及我在Internet上找到的其他资源:
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不熟悉可能会导致我的困惑.在这个新平台上,这对我来说只是第4天.
我需要做些什么才能让XCode编译Objective C代码?请记住,我对此有点新意,所以如果你留下详细的答案而不是firebreath标签中常见的模糊单行,我会很感激.我只是有点头脑,但如果你能让我超越这个障碍,我肯定我会很高兴从那里出发.
更新:
我编辑了项目/ MyPlugin / CMakeLists.txt,并在那里添加了.m和.mm规则.运行prepmac.sh后,文件包含在项目中,但我仍然得到相同的编译错误.
我将所有.h文件和.mm文件从Obj C代码移动到MyPlugin根文件夹并重新运行prepmac.sh文件.问题仍然存在.相同的编译错误.
您的问题是您有.h文件,这些文件包含具有目标c类型和/或包含在其中的C文件.为了做你想要的事情,c所使用的所有类都需要在#ifdef中保存所有与obj相关的东西,或者根本不在头文件中暴露任何obj c.例如,您可以在标题中使用此ifdef:
#ifdef __OBJC__ // Objective C/C++++ code here #endif
重要的是要记住.h文件包含以及头文件,因此实际包含它们.如果在.cpp文件中包含目标c代码,编译器会感到困惑和哭泣.
编辑:最重要的是要记住,您需要确保cpp文件中不包含任何目标c头文件(或具有客观c代码的其他文件).如果你能做到这一点,你会没事的.
精彩评论