如何让 XCode 构建一个包含 Objective-C++ 的项目?

Posted

技术标签:

【中文标题】如何让 XCode 构建一个包含 Objective-C++ 的项目?【英文标题】:How do I get XCode to build a project with Objective-C++ in it? 【发布时间】:2014-04-12 08:48:09 【问题描述】:

我成功地将 Scintilla 框架添加到我的 XCode 项目中(即它正确地找到了头文件),但是因为它是用 Objective-C++ 编写的,所以它无法编译。由于::s,我收到 8 个语法错误。我已经发现你不能从纯 Objective-C 文件中包含 Objective-C++,所以我将文件扩展名更改为 mm。它仍然给我同样的 8 个错误。 我还将(导入文件的)文件类型更改为sourcecode.cpp.objcpp

相关的代码行(cmets中的错误-行号来自原始文件,因此没有cmets中的错误):

ScintillaView.h

// Line 47-49
@protocol ScintillaNotificationProtocol 
- (void)notification: (Scintilla::SCNotification*)notification; // 4 errors on this line:
                                                                //   1. expected type-specifier
                                                                //   2. expected ')'
                                                                //   3. expected identifier
                                                                //   4. expected ';'
@end
// [snip]
// Line 131
- (void) notification: (Scintilla::SCNotification*) notification;   // The exact same errors.

复制这段代码时,我注意到:: 运算符在文件中使用了几次,因此解析器只能在某些地方成功匹配它。

再一次,这段代码不是我的,而是取自 Scintilla Cocoa 库。 (更多信息请看这里:http://www.scintilla.org/)

XCode 3.2.6、Mac OS X 10.6.8

【问题讨论】:

您没有使用 Xcode 4.2 有什么原因吗? 你是第三人问这个问题,昨天第二个问这个问题。请参考此评论线程:apple.stackexchange.com/questions/127235/…。 @BlackFrog 即使您的付费 Apple 开发者帐户不是最新的,也可以试试这个 (***.com/questions/10335747/…) @BlackFrog 谢谢,但 4.2 是支持 Snow Leopard 的最后一个版本,而您链接到的问题中最旧的版本是 4.3.2。 发布错误怎么样? 【参考方案1】:

添加

typedef tdSCNotification Scintilla::SCNotification

在第一条违规行显示该命名空间中没有名为SCNotification 的类型之前。所以我搜索了包含的头文件(幸运的是,只有三个)namespace Scintilla 。它位于第一个包含的头文件Scintilla.h 中。但它看起来像这样:

#ifdef SCI_NAMESPACE
namespace Scintilla 
#endif

#ifdef SCI_NAMESPACE

#endif

所以我假设 SCI_NAMESPACE 没有定义。我将#define SCI_NAMESPACE 添加到Scintilla.h 某处在线 45 并且它起作用了。几乎。我收到另一条错误消息:

没有找到框架 Scintilla 命令 /Developer/usr/bin/llvm-g++-4.2 失败,退出代码为 1

我认为这与我如何将框架添加到我的项目中有关,所以它应该是一个单独的问题。

【讨论】:

以上是关于如何让 XCode 构建一个包含 Objective-C++ 的项目?的主要内容,如果未能解决你的问题,请参考以下文章

xcode 如何使用框架进行开发

谁能举例说明如何配置 Bamboo 来构建 Xcode 项目?

如何让 Xcode 8 从命令行自动生成配置文件?

如何将构建阶段复制到Xcode中的另一个目标?

如何从 XCode 导出构建日志?

Xcode 基础工程结构解析